Cycle de vie des haricots de printemps

Cycle de vie des haricots de printemps
Dans cet article, nous apprendrons le cycle de vie de l'objet Java Bean et quelques méthodes utiles pour effectuer les opérations pendant sa phase de cycle de vie telles que l'initialisation et la destruction de l'objet Bean.Chaque objet Bean est géré par le Spring IOC et le cycle de vie démarre lorsque le conteneur (CIO) démarre en fonction des métadonnées de configuration.

Le cycle de vie de Spring Bean a de nombreuses étapes telles que Initialisation, course et détruire. Nous pouvons effectuer notre tâche personnalisée entre ces phases à des fins de test / débogage ou à d'autres fins d'utilité.

Par exemple, Si nous voulons effectuer certaines tâches au début du haricot et des tâches liées à nettoyer à la fin, nous pouvons le faire à l'initialisation du haricot ou avant de détruire l'objet de haricot, respectivement. Il rend l'application plus fonctionnelle et plus facile à déboguer également.

À cette fin, Spring fournit un peu de prédéfini interfaces et annotations Cela facilite notre tâche. Il existe deux façons d'effectuer ces tâches:

  • Interfaces
  • Annotations

Tout d'abord, nous commençons par les interfaces, puis examinons les annotations.

Interfaces pour le cycle de vie Java Bean

Le printemps a deux interfaces, InitializingBean et DisposableBean, qui contient plusieurs méthodes d'utilité pour effectuer les tâches pendant le cycle de vie des haricots.

Pour effectuer la tâche d'initialisation, nous pouvons utiliser AfterProperTesset () Méthode de la InitializingBean Interface de la même manière pour le nettoyage des ressources. Avant de détruire l'objet de haricot, nous pouvons utiliser le détruire() Méthode de la DisposableBean interface.

Commençons par des exemples d'exécution.

Implémentation de méthodes de cycle de vie à l'aide d'interfaces

Dans ce cas, nous créons d'abord une application de printemps basée sur Maven, puis créons un employé de haricots. Cette classe Bean implémente les deux interfaces dont nous avons discuté. Maintenant, nous devons également mettre en œuvre leurs méthodes.

Le AfterProperTesset () la méthode est utilisée pour effectuer la tâche d'initialisation et le détruire() Méthode pour effectuer la tâche avant de détruire l'objet bean. Voir le code source de la classe de bean des employés.
// employé.Java

packagecom.linuxhint.haricots;
importorg.springframework.haricots.usine.DisposableBean;
importorg.springframework.haricots.usine.InitializingBean;
importorg.springframework.stéréotype.Composant;
@Component ("EMP")
L'employé de la classe publique implémente InitializingBean, DisposableBean
PrivateIntid;
nom de chaîne privé;
public String getName ()
retourname;

publicVoidSetName (nom de chaîne)
ce.name = name;

publicIntGetId ()
retourId;

publicVoidSetId (intid)
ce.id = id;

@Passer outre
publicVoidAfterProperTesTet () lève une exception
Système.dehors.println ("Initialisation des tâches réalisées…");

@Passer outre
publicVoidDestroy () lève une exception
Système.dehors.println ("tâches de nettoyage effectuées… \ objet nbean détruit!");

Ceci est la classe principale où nous instancions le haricot et appelons sa méthode Getters and Setters.

// Springapp.Java

package com.Linuxhint;
org d'importation.springframework.contexte.annotation.AnnotationConfigApplicationContext;
Importer com.linuxhint.haricots.Employé;
classe publique SpringApp
public static void main (String [] args)
AnnotationConfigApplicationContext AC = new AnnotationConfigApplicationContext (SpringConfig.classe);
Employé EMP = (employé) AC.getbean ("EMP");
empiler.setName ("Rohan");
Système.dehors.println ("Exécution de bean…");
Nom de la chaîne = Emp.getName ();
Système.dehors.println ("name:" + name);
CA.fermer();

// SpringConfig.Java

packagecom.Linuxhint;
importorg.springframework.contexte.annotation.Composantscan;
importorg.springframework.contexte.annotation.Configuration;
@Configuration
@Componentscan ("com.linuxhint.* ")
publicClassSpringConfig

// pom.xml

C'est le fichier XML qui contient tout le code de dépendance pour l'application.


4.0.0
com.linuxhint
Springapp
0.0.1 snapshot
Springapp
Une application de printemps simple


org.springframework
printemps
$ printemps.version


org.springframework
contexte de printemps
$ printemps.version



5.2.8.LIBÉRER

Exécuter le projet

Après avoir créé le projet, il est temps d'exécuter l'application pour vérifier si tous les fichiers fonctionnent bien et que l'application fonctionne comme prévu. Cette application imprime la sortie suivante à la fenêtre de la console:

Sortir:

Initialisation des tâches effectuées…
Exécution de haricots…
Nom: Rohan
Tâches de nettoyage effectuées…
Objet de haricot détruit!

Avis: Nous n'avons pas appelé les méthodes de cycle de vie, mais nous avons implicitement appelé le conteneur de ressort (CIO).

Implémentation de méthodes de cycle de vie à l'aide d'annotations

C'est l'approche moderne où nous utilisons les annotations en place des interfaces. Cela signifie qu'aucune interface ne doit être mise en œuvre par la classe de bean. Nous avons juste besoin de marquer les méthodes pour appeler en utilisant les annotations @postConstruct et @Predestroy.

L'annotation @postConstruct est appelée au moment de l'initialisation tandis que le @Predestroy est appelé juste avant de détruire l'objet bean.

Note: Avant d'utiliser les annotations, nous devons ajouter la dépendance suivante au POM de notre projet.fichier xml.

Ce package n'est pas présent dans le package de printemps par défaut. Ainsi, pour Java 9 et des versions supérieures, mettez ces pots dans le pom.Fichier XML:


javax.annotation
javax.annotation-api
1.3.2

Spring ne fournit aucune méthode prédéfini comme dans le cas d'interface. Nous sommes libres de créer n'importe quelle méthode ayant un nom. Nous avons juste besoin de les marquer avec les annotations pour spécifier quand les appeler par le conteneur IOC.

Ici, nous créons la méthode Initwork () pour effectuer la tâche au niveau initial et la méthode de travail () pour effectuer la tâche avant de détruire l'objet bean.

Mettre à jour le Employé.Java Fichier en fonction du code source suivant:

// Employé.Java

packagecom.linuxhint.haricots;
importjavax.annotation.Postconstructeur;
importjavax.annotation.Prestestroy;
importorg.springframework.stéréotype.Composant;
@Component ("EMP")
Employé de la classe publique
PrivateIntid;
nom de chaîne privé;
public String getName ()
retourname;

publicVoidSetName (nom de chaîne)
ce.name = name;

publicIntGetId ()
retourId;

publicVoidSetId (intid)
ce.id = id;

@PostConstruct
publicVoidiNitwork ()
Système.dehors.println ("Initialisation des tâches réalisées…");

@Predestroy
publicVoiDendWork ()
Système.dehors.println ("tâches de nettoyage effectuées… \ objet nbean détruit!");

Exécuter le projet

Maintenant, exécutez à nouveau l'application et vérifiez la console. La sortie doit être similaire à la sortie précédente.

Initialisation des tâches effectuées…
Exécution de haricots…
Nom: Rohan
Tâches de nettoyage effectuées…
Objet de haricot détruit!