Spring - Scopes Bean

Lors de la définition d'un <bean>, vous avez la possibilité de déclarer une portée pour ce bean. Par exemple, pour forcer Spring à produire une nouvelle instance de bean chaque fois que vous en avez besoin, vous devez déclarer que l'attribut scope du bean estprototype. De même, si vous voulez que Spring renvoie la même instance de bean chaque fois que vous en avez besoin, vous devez déclarer l'attribut scope du bean comme étantsingleton.

Spring Framework prend en charge les cinq étendues suivantes, dont trois ne sont disponibles que si vous utilisez un ApplicationContext Web.

N ° Sr. Portée et description
1

singleton

Cela étend la définition du bean à une seule instance par conteneur Spring IoC (par défaut).

2

prototype

Cela permet à une seule définition de bean d'avoir n'importe quel nombre d'instances d'objet.

3

request

Cela étend une définition de bean à une requête HTTP. Uniquement valable dans le contexte d'un Spring ApplicationContext compatible Web.

4

session

Cela étend une définition de bean à une session HTTP. Uniquement valable dans le contexte d'un Spring ApplicationContext compatible Web.
5

global-session

Cela étend une définition de bean à une session HTTP globale. Uniquement valable dans le contexte d'un Spring ApplicationContext compatible Web.

Dans ce chapitre, nous discuterons des deux premières étendues et les trois autres seront discutées lorsque nous discuterons de Spring ApplicationContext compatible Web.

La portée singleton

Si une étendue est définie sur singleton, le conteneur Spring IoC crée exactement une instance de l'objet défini par cette définition de bean. Cette instance unique est stockée dans un cache de ces beans singleton, et toutes les requêtes et références ultérieures pour ce bean nommé renvoient l'objet mis en cache.

La portée par défaut est toujours singleton. Cependant, lorsque vous avez besoin d'une et une seule instance d'un bean, vous pouvez définir lescope propriété à singleton dans le fichier de configuration du bean, comme indiqué dans l'extrait de code suivant -

<!-- A bean definition with singleton scope -->
<bean id = "..." class = "..." scope = "singleton">
   <!-- collaborators and configuration for this bean go here -->
</bean>

Exemple

Laissez-nous mettre en place un IDE Eclipse fonctionnel et suivez les étapes suivantes pour créer une application Spring -

Pas La description
1 Créez un projet avec un nom SpringExample et créez un package com.tutorialspoint sous lesrc dossier dans le projet créé.
2 Ajoutez les bibliothèques Spring requises à l'aide de l' option Ajouter des JAR externes comme expliqué dans le chapitre Exemple de Spring Hello World .
3 Créez les classes Java HelloWorld et MainApp sous le package com.tutorialspoint .
4 Créez le fichier de configuration Beans Beans.xml sous lesrc dossier.
5 La dernière étape consiste à créer le contenu de tous les fichiers Java et le fichier de configuration Bean et à exécuter l'application comme expliqué ci-dessous.

Voici le contenu de HelloWorld.java fichier -

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);
   }
}

Voici le contenu de la MainApp.java fichier -

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();
   }
}

Voici le fichier de configuration Beans.xml requis pour la portée 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>

Une fois que vous avez terminé de créer les fichiers de configuration source et bean, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant -

Your Message : I'm object A
Your Message : I'm object A

La portée du prototype

Si la portée est définie sur prototype, le conteneur Spring IoC crée une nouvelle instance de bean de l'objet chaque fois qu'une demande pour ce bean spécifique est effectuée. En règle générale, utilisez la portée prototype pour tous les beans à état complet et la portée singleton pour les beans sans état.

Pour définir une portée de prototype, vous pouvez définir le scope propriété à prototype dans le fichier de configuration du bean, comme indiqué dans l'extrait de code suivant -

<!-- A bean definition with prototype scope -->
<bean id = "..." class = "..." scope = "prototype">
   <!-- collaborators and configuration for this bean go here -->
</bean>

Exemple

Laissez-nous avoir Eclipse IDE en place et suivez les étapes suivantes pour créer une application Spring -

Pas La description
1 Créez un projet avec un nom SpringExample et créez un package com.tutorialspoint sous lesrc dossier dans le projet créé.
2 Ajoutez les bibliothèques Spring requises à l'aide de l' option Ajouter des JAR externes comme expliqué dans le chapitre Exemple de Spring Hello World .
3 Créez les classes Java HelloWorld et MainApp sous le package com.tutorialspoint .
4 Créez le fichier de configuration Beans Beans.xml sous lesrc dossier.
5 La dernière étape consiste à créer le contenu de tous les fichiers Java et le fichier de configuration Bean et à exécuter l'application comme expliqué ci-dessous.

Voici le contenu de HelloWorld.java fichier

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);
   }
}

Voici le contenu de la MainApp.java fichier -

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();
   }
}

Voici le fichier de configuration Beans.xml requis pour la portée du prototype -

<?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>

Une fois que vous avez terminé de créer les fichiers de configuration source et bean, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant -

Your Message : I'm object A
Your Message : null