Primavera - escopos de feijão
Ao definir um <bean>, você tem a opção de declarar um escopo para aquele bean. Por exemplo, para forçar o Spring a produzir uma nova instância de bean cada vez que uma for necessária, você deve declarar o atributo de escopo do bean comoprototype. Da mesma forma, se você deseja que o Spring retorne a mesma instância de bean cada vez que um for necessário, você deve declarar o atributo de escopo do bean comosingleton.
O Spring Framework suporta os cinco escopos a seguir, três dos quais estão disponíveis apenas se você usar um ApplicationContext compatível com a web.
Sr. Não. | Escopo e descrição |
---|---|
1 | singleton Isso define o escopo da definição do bean para uma única instância por contêiner Spring IoC (padrão). |
2 | prototype Isso faz com que uma única definição de bean tenha qualquer número de instâncias de objeto. |
3 | request Isso define o escopo de uma definição de bean para uma solicitação HTTP. Válido apenas no contexto de um Spring ApplicationContext ciente da web. |
4 | session Isso define o escopo de uma definição de bean para uma sessão HTTP. Válido apenas no contexto de um Spring ApplicationContext ciente da web. |
5 | global-session Isso define o escopo de uma definição de bean para uma sessão HTTP global. Válido apenas no contexto de um Spring ApplicationContext ciente da web. |
Neste capítulo, discutiremos sobre os primeiros dois escopos e os três restantes serão discutidos quando discutirmos sobre o Spring ApplicationContext ciente da web.
O escopo singleton
Se um escopo for definido como singleton, o contêiner Spring IoC cria exatamente uma instância do objeto definido por aquela definição de bean. Essa única instância é armazenada em um cache de tais beans singleton e todas as solicitações e referências subsequentes para esse bean nomeado retornam o objeto em cache.
O escopo padrão é sempre singleton. No entanto, quando você precisa de uma e apenas uma instância de um bean, você pode definir oscope propriedade para singleton no arquivo de configuração do bean, conforme mostrado no seguinte trecho de código -
<!-- A bean definition with singleton scope -->
<bean id = "..." class = "..." scope = "singleton">
<!-- collaborators and configuration for this bean go here -->
</bean>
Exemplo
Vamos ter um Eclipse IDE funcionando e realizar as seguintes etapas para criar um aplicativo Spring -
Passos | Descrição |
---|---|
1 | Crie um projeto com um nome SpringExample e crie um pacote com.tutorialspoint sob osrc pasta no projeto criado. |
2 | Adicione as bibliotecas Spring necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Exemplo do Spring Hello World . |
3 | Crie classes Java HelloWorld e MainApp no pacote com.tutorialspoint . |
4 | Crie o arquivo de configuração do Beans Beans.xml sob osrc pasta. |
5 | A etapa final é criar o conteúdo de todos os arquivos Java e do arquivo de configuração do Bean e executar o aplicativo conforme explicado abaixo. |
Aqui está o conteúdo de HelloWorld.java arquivo -
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
A seguir está o conteúdo do MainApp.java arquivo -
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
objA.setMessage("I'm object A");
objA.getMessage();
HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
objB.getMessage();
}
}
A seguir está o arquivo de configuração Beans.xml necessário para o escopo singleton -
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "singleton">
</bean>
</beans>
Quando terminar de criar os arquivos de configuração de origem e bean, vamos executar o aplicativo. Se estiver tudo bem com o seu aplicativo, ele imprimirá a seguinte mensagem -
Your Message : I'm object A
Your Message : I'm object A
O escopo do protótipo
Se o escopo for definido como protótipo, o contêiner Spring IoC cria uma nova instância de bean do objeto toda vez que uma solicitação para aquele bean específico é feita. Como regra, use o escopo do protótipo para todos os beans com estado completo e o escopo singleton para os beans sem estado.
Para definir um escopo de protótipo, você pode definir o scope propriedade para prototype no arquivo de configuração do bean, conforme mostrado no seguinte trecho de código -
<!-- A bean definition with prototype scope -->
<bean id = "..." class = "..." scope = "prototype">
<!-- collaborators and configuration for this bean go here -->
</bean>
Exemplo
Vamos ter o Eclipse IDE em funcionamento e seguir as etapas a seguir para criar um aplicativo Spring -
Passos | Descrição |
---|---|
1 | Crie um projeto com um nome SpringExample e crie um pacote com.tutorialspoint sob osrc pasta no projeto criado. |
2 | Adicione as bibliotecas Spring necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Exemplo do Spring Hello World . |
3 | Crie classes Java HelloWorld e MainApp no pacote com.tutorialspoint . |
4 | Crie o arquivo de configuração do Beans Beans.xml sob osrc pasta. |
5 | A etapa final é criar o conteúdo de todos os arquivos Java e do arquivo de configuração do Bean e executar o aplicativo conforme explicado abaixo. |
Aqui está o conteúdo de HelloWorld.java Arquivo
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
A seguir está o conteúdo do MainApp.java arquivo -
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
objA.setMessage("I'm object A");
objA.getMessage();
HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
objB.getMessage();
}
}
A seguir está o arquivo de configuração Beans.xml necessário para o escopo do protótipo -
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "prototype">
</bean>
</beans>
Quando terminar de criar os arquivos de configuração de origem e bean, vamos executar o aplicativo. Se estiver tudo bem com o seu aplicativo, ele imprimirá a seguinte mensagem -
Your Message : I'm object A
Your Message : null