Tilbakekallinger om våren

1. Oversikt

I denne opplæringen skal vi lære forskjellige måter å bruke tilbakekallinger for nedleggelse med Spring.

Den viktigste fordelen med å bruke en tilbakeringing av nedleggelse er at den gir oss kontroll over en elegant applikasjonsutgang.

2. Tilbakestillinger for tilbakestilling

Spring støtter både tilbakekallinger på komponentnivå og kontekstnivå. Vi kan opprette disse tilbakeringingene ved hjelp av:

  • @PreDestroy
  • Engangsbønne grensesnitt
  • Bønne-ødelegge metoden
  • Global ServletContextListener

La oss se alle disse tilnærmingene med eksempler.

2.1. Ved hjelp av @PreDestroy

La oss lage en bønne som bruker @PreDestroy:

@Component public class Bean1 {@PreDestroy public void destroy () {System.out.println ("Callback utløst - @ PreDestroy."); }}

Under initialiseringen av bønner vil Spring registrere alle bønnemetodene som er merket med @PreDestroy og påkaller dem når applikasjonen avsluttes.

2.2. Bruker Engangsbønne Grensesnitt

Vår andre bønne vil implementere Engangsbønne grensesnitt for å registrere tilbakeringing av avstenging:

@Komponent offentlig klasse Bean2 implementerer DisposableBean {@Override public void destroy () kaster Unntak {System.out.println ("Callback utløst - DisposableBean."); }}

2.3. Erklære en Bean Destroy Method

For denne tilnærmingen oppretter vi først en klasse med en tilpasset destrueringsmetode:

public class Bean3 {public void destroy () {System.out.println ("Callback triggered - bean destroy method."); }}

Deretter oppretter vi konfigurasjonsklassen som initialiserer bønnen og markerer dens ødelegge() metode som vår tilbakeringing av nedleggelse:

@Configuration public class ShutdownHookConfiguration {@Bean (destroyMethod = "destroy") public Bean3 initializeBean3 () {return new Bean3 (); }}

XML-måten å registrere destrueringsmetoden på er:

2.4. Bruke en global ServletContextListener

I motsetning til de tre andre tilnærmingene, som registrerer tilbakeringing på bønnenivå, de ServletContextListener registrerer tilbakeringing på kontekstnivå.

For dette la oss lage en tilpasset kontekstlytter:

public class ExampleServletContextListener implementerer ServletContextListener {@Override public void contextDestroyed (ServletContextEvent event) {System.out.println ("Callback triggered - ContextListener."); } @ Override public void contextInitialized (ServletContextEvent event) {// Utløser når kontekst initialiseres}}

Vi må registrere det på ServletListenerRegistrationBean i konfigurasjonsklassen:

@Bean ServletListenerRegistrationBean servletListener () {ServletListenerRegistrationBean srb = ny ServletListenerRegistrationBean (); srb.setListener (nytt eksempelServletContextListener ()); returner srb; }

3. Konklusjon

Vi har lært om de forskjellige måtene Spring tilbyr for å registrere tilbakekallinger i nedleggelse, både på bønnenivå og på kontekstnivå.

Disse kan brukes til å stenge applikasjonen elegant og effektivt frigjøre de brukte ressursene.

Som alltid finnes alle eksemplene i denne artikkelen på Github.