Devoluciones de llamada de cierre de primavera

1. Información general

En este tutorial, aprenderemos diferentes formas de usar devoluciones de llamada de apagado con Spring .

La principal ventaja de usar una devolución de llamada de apagado es que nos da control sobre una salida elegante de la aplicación.

2. Enfoques de devolución de llamada de cierre

Spring admite devoluciones de llamada de apagado tanto a nivel de componente como a nivel de contexto. Podemos crear estas devoluciones de llamada usando:

  • @Predestroy
  • Interfaz DisposableBean
  • Método de destrucción de frijoles
  • ServletContextListener global

Veamos todos estos enfoques con ejemplos.

2.1. Usando @PreDestroy

Creemos un bean que use @PreDestroy :

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

Durante la inicialización del bean, Spring registrará todos los métodos del bean que están anotados con @PreDestroy y los invoca cuando la aplicación se apaga.

2.2. Uso de la interfaz DisposableBean

Nuestro segundo bean implementará la interfaz DisposableBean para registrar la devolución de llamada de apagado:

@Component public class Bean2 implements DisposableBean { @Override public void destroy() throws Exception { System.out.println( "Callback triggered - DisposableBean."); } }

2.3. Declarar un método de destrucción de frijoles

Para este enfoque, primero crearemos una clase con un método de destrucción personalizado:

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

Luego, creamos la clase de configuración que inicializa el bean y marca su método destroy () como nuestra devolución de llamada de apagado:

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

La forma XML de registrar el método de destrucción es:

2.4. Usando un ServletContextListener global

A diferencia de los otros tres enfoques, que registran la devolución de llamada a nivel de la haba, la ServletContextListener registra la devolución de llamada a nivel de contexto .

Para esto, creemos un detector de contexto personalizado:

public class ExampleServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent event) { System.out.println( "Callback triggered - ContextListener."); } @Override public void contextInitialized(ServletContextEvent event) { // Triggers when context initializes } }

Necesitamos registrarlo en ServletListenerRegistrationBean en la clase de configuración:

@Bean ServletListenerRegistrationBean servletListener() { ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean(); srb.setListener(new ExampleServletContextListener()); return srb; }

3. Conclusión

Hemos aprendido sobre las diferentes formas que ofrece Spring para registrar devoluciones de llamada de apagado, tanto a nivel de bean como a nivel de contexto.

Estos se pueden usar para cerrar la aplicación de manera elegante y eficaz, liberando los recursos utilizados.

Como siempre, todos los ejemplos mencionados en este artículo se pueden encontrar en Github.