Spring Bean Lifecycle

Spring Bean Lifecycle
I denne artikkelen lærer vi Java Bean -objektets livssyklus og noen nyttige metoder for å utføre operasjonene i løpet av livssyklusfasen som initialisering og ødelegge bønneobjektet.Hvert bønneobjekt administreres av Spring IOC og livssyklusen starter når containeren (IOC) starter basert på konfigurasjonsmetadataene.

Spring Bean -livssyklusen har mange trinn som for eksempel Initialisering, løping og ødelegger. Vi kan utføre vår tilpassede oppgave mellom disse fasene for testing/feilsøking eller andre bruksformål.

For eksempel, Hvis vi ønsker å utføre noen oppgaver i starten av bønnen og noen opprydding av relaterte oppgaver på slutten, kan vi gjøre det ved bønnens initialisering eller før vi ødelegger bønneobjektet. Det gjør applikasjonen mer funksjonell og enklere å feilsøke også.

For dette formålet gir våren noen forhåndsdefinerte Grensesnitt og merknader Det gjør oppgaven vår enkel. Det er to måter å utføre disse oppgavene på:

  • Grensesnitt
  • Merknader

Først starter vi med grensesnittene og ser deretter på merknadene.

Grensesnitt for Java Bean -livssyklus

Våren har to grensesnitt, Initialiserendebean og DisponableBean, som inneholder flere bruksmetoder for å utføre oppgavene under bønnens livssyklus.

For å utføre initialiseringsoppgaven, kan vi bruke AfterPropertiesset () metode for Initialiserendebean Grensesnitt på samme måte for rengjøring av ressurser. Før vi ødelegger bønneobjektet, kan vi bruke ødelegge() metode for DisponableBean grensesnitt.

La oss starte med løpende eksempler.

Implementere livssyklusmetoder ved bruk av grensesnitt

I dette tilfellet oppretter vi først en Maven-basert vårapplikasjon og oppretter en bønneansatt. Denne bønneklassen implementerer begge grensesnitt som vi diskuterte. Nå må vi implementere metodene deres også.

De AfterPropertiesset () metoden brukes til å utføre initialiseringsoppgaven og ødelegge() metode for å utføre oppgaven før du ødelegger bønneobjektet. Se kildekoden til ansattes bønneklasse.
// Ansatt.Java

Packagecom.Linuxhint.bønner;
importorg.Springframework.bønner.fabrikk.DisposableBean;
importorg.Springframework.bønner.fabrikk.Initialiseringsbøker;
importorg.Springframework.stereotype.Komponent;
@Component ("EMP")
PublicClass ansatt Implementinitializingbean, DisposableBean
privatintid;
privat strengnavn;
public String getName ()
Returname;

publicVoidSetName (strengnavn)
dette.Navn = navn;

publicIntgetID ()
returnid;

publicVoidSetId (Insid)
dette.id = id;

@Overstyring
publicVoidAfterPropertiesset () kaster unntak
System.ute.println ("Initialisere oppgaver gjort ...");

@Overstyring
publicVoidDestroy () kaster unntak
System.ute.Println ("Rengjøringsoppgaver gjort ... \ nBean -objekt ødelagt!");

Dette er hovedklassen der vi instantiserer bønnen og kaller metoden.

// SpringApp.Java

pakke com.Linuxhint;
Import org.Springframework.kontekst.merknad.AnnotationConfigApplicationContext;
import com.Linuxhint.bønner.Ansatt;
offentlig klasse SpringApp
public static void main (String [] args)
AnnotationConFigApplicationContext AC = Ny AnnotationConfigApplicationContext (SpringConfig.klasse);
Ansatt EMP = (Ansatt) AC.getbean ("emp");
emp.setName ("Rohan");
System.ute.Println ("Bean Executing ...");
Strengnavn = emp.getName ();
System.ute.println ("navn:"+navn);
Ac.Lukk();

// SpringConfig.Java

Packagecom.Linuxhint;
importorg.Springframework.kontekst.merknad.Komponentercan;
importorg.Springframework.kontekst.merknad.Konfigurasjon;
@Configuration
@Componentscan ("com.Linuxhint.*")
publicClassSpringConfig

// pom.XML

Denne XML -filen som inneholder all avhengighetskode for applikasjonen.


4.0.0
com.Linuxhint
SpringApp
0.0.1-SNAPSHOT
SpringApp
En enkel vårapp


org.Springframework
Spring-core
$ våren.versjon


org.Springframework
Spring-Context
$ våren.versjon



5.2.8.UTGIVELSE

Kjør prosjektet

Etter å ha opprettet prosjektet, er det på tide å kjøre applikasjonen for å sjekke om alle filene fungerer bra og applikasjonen fungerer som forventet. Denne applikasjonen skriver ut følgende utgang til konsollvinduet:

Produksjon:

Initialisere oppgaver gjort ..
Bønne utførelse ..
Navn: Rohan
Rengjøringsoppgaver gjort ..
Bønneobjekt ødelagt!

Legge merke til: Vi kalte ikke livssyklusmetodene, men implisitt ringte vårbeholderen (IOC).

Implementering av livssyklusmetoder ved hjelp av merknader

Dette er den moderne tilnærmingen der vi bruker merknadene på grensesnitt. Det betyr at det ikke er behov for flere grensesnitt for å implementeres av bønneklassen. Vi trenger bare å merke metodene for å ringe ved hjelp av @postconstruct og @predestroy -merknader.

@PostConstruct -merknaden kalles ved initialiseringstid mens @Predestroy kalles rett før du ødelegger bønneobjektet.

Merk: Før vi bruker merknadene, må vi legge til følgende avhengighet av prosjektets POM.XML -fil.

Denne pakken er ikke til stede i standardfjærpakken. Så for Java 9 og høyere versjoner, legg disse glassene i POM.XML -fil:


Javax.merknad
Javax.Merknad-api
1.3.2

Våren gir ingen forhåndsinnstillingsmetode som i grensesnittetilfeltet. Vi står fritt til å lage enhver metode som har noe navn. Vi trenger bare å merke dem med merknadene for å spesifisere når vi skal ringe dem av IOC -beholderen.

Her oppretter vi initwork () -metoden for å utføre oppgaven på startnivå og sluttarbeid () -metoden for å utføre oppgaven før du ødelegger bønneobjektet.

Oppdater Ansatt.Java fil i henhold til følgende kildekode:

// Ansatt.Java

Packagecom.Linuxhint.bønner;
importjavax.merknad.Postkonstruksjon;
importjavax.merknad.Predestroy;
importorg.Springframework.stereotype.Komponent;
@Component ("EMP")
PublicClass -ansatt
privatintid;
privat strengnavn;
public String getName ()
Returname;

publicVoidSetName (strengnavn)
dette.Navn = navn;

publicIntgetID ()
returnid;

publicVoidSetId (Insid)
dette.id = id;

@PostConstruct
publicVoidInitwork ()
System.ute.println ("Initialisere oppgaver gjort ...");

@Predestroy
publicVoidendwork ()
System.ute.Println ("Rengjøringsoppgaver gjort ... \ nBean -objekt ødelagt!");

Kjør prosjektet

Kjør nå applikasjonen igjen og sjekk konsollen. Utgangen skal være lik den forrige utgangen.

Initialisere oppgaver gjort ..
Bønne utførelse ..
Navn: Rohan
Rengjøringsoppgaver gjort ..
Bønneobjekt ødelagt!