[Java] Spring DI ④ --Gestion du cycle de vie
      
      
        
        
        
        
Qu'est-ce que la gestion du cycle de vie DI?
- DI vous permet de définir la portée d'une instance
 
- La portée est définie avec l'annotation @Scope
 
- Par défaut, il s'agit d'un singleton et une seule instance peut être créée.
 
- Notez si le champ a des instances avec des portées différentes
 
Qu'est-ce que la gestion du cycle de vie?
- Gérer la création (nouvelle) et la destruction d'instance
 
- Pour détruire l'instance nouvellement créée, mettez null dans la variable pour libérer la mémoire
 
- Pourtant! ** Les champs avec @Autowired seront automatiquement gérés par Spring sans être nuls! ** **
 
- De plus, lors de l'utilisation du servlet ** Spring enregistrera également la portée de l'instance! ** (Servlet est une fonction pour enregistrer une instance dans la portée Session ou la portée Requête)
 
- Remarque: assurez-vous de savoir quand l'instance sera détruite
 
Qu'est-ce qu'une portée
- Date d'expiration de l'instance
 
- Exemple: les variables déclarées dans l'instruction if en tant que variables Java locales ne peuvent pas être utilisées en dehors de l'instruction if car la portée est à l'intérieur de l'instruction if.
 
- Portée de la session
 
- Date d'expiration de la connexion de l'utilisateur à la déconnexion
 
- Champ d'application de la demande
 
- Une requête HTTP expire
 
- Exemple: la portée de la demande va de l'écran d'enregistrement de l'utilisateur à l'écran de résultat d'enregistrement
 
Comment utiliser Scope
- Spécifiez la portée à enregistrer dans l'annotation avec l'annotation @Scope comme indiqué ci-dessous.
 
- En plus de @Component, l'annotation @Scope peut être utilisée pour @Bean, @Controller, etc.
 
- ** Facile à créer et à détruire des instances **
 
@Component
@Scope("prototype")
public class SampleComponent{
}
Portée spécifiée par @Scope
- singleton
 
- Configuration par défaut
 
- Créez une seule instance au démarrage de Spring,
 
- Partager et utiliser une instance après la création
 
- prototype
 
- Chaque fois que vous obtenez un bean, une instance est créée
 
- session
 
- Une instance est créée pour chaque session HTTP. Utilisé uniquement pour les applications Web
 
- request
 
- Une instance est créée pour chaque requête HTTP. Utilisé uniquement pour les applications Web
 
- globalSession
 
- Généré pour chaque session Grobal dans l'environnement de portlet
 
- Utilisé uniquement pour les applications Web prenant en charge les portlets
 
- application
 
- Une instance est créée pour chaque contexte du servlet. Uniquement disponible pour les applications Web.
 
Remarque 1: la valeur par défaut est singleton
- Sans @Scope, l'instance est créée avec singleton
 
- Avec singleton, une seule instance de l'objet peut être créée, et il n'est même pas possible de créer deux instances ou plus.
 
- 
- Singleton est généralement suffisant pour la portée de @Controller, @Service, @Repository
 
 
Remarque 2: si le champ a des instances avec des portées différentes
- Si une instance de portée singleton a un objet de portée prototype, ** Bean avec portée prototype (ci-après appelé PrototypeComponent) devient portée singleton **
 
//Devient une portée singleton
@Component
@Scope("prototype")
public class PrototypeComponent{
}
@Component
public class SingletonComponent{	
    @Autowired
    private PrototypeComponent component;
}