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