Primavera - Ciclo de vida del frijol

El ciclo de vida de un frijol Spring es fácil de entender. Cuando se crea una instancia de un bean, es posible que sea necesario realizar alguna inicialización para ponerlo en un estado utilizable. De manera similar, cuando el frijol ya no se necesita y se retira del contenedor, es posible que se requiera algo de limpieza.

Sin embargo, hay listas de las actividades que tienen lugar detrás de escena entre el momento de la instanciación del bean y su destrucción, este capítulo discutirá solo dos métodos importantes de devolución de llamada del ciclo de vida del bean, que se requieren en el momento de la inicialización del bean y su destrucción.

Para definir la configuración y el desmontaje de un bean, simplemente declaramos el <bean> con initmethod y / o destroy-methodparámetros. El atributo init-method especifica un método que se llamará en el bean inmediatamente después de la instanciación. De manera similar, destroymethod especifica un método que se llama justo antes de que se elimine un bean del contenedor.

Devoluciones de llamada de inicialización

La interfaz org.springframework.beans.factory.InitializingBean especifica un método único:

void afterPropertiesSet() throws Exception;

Por lo tanto, simplemente puede implementar la interfaz anterior y el trabajo de inicialización se puede realizar dentro del método afterPropertiesSet () de la siguiente manera:

public class ExampleBean implements InitializingBean {
   public void afterPropertiesSet() {
      // do some initialization work
   }
}

En el caso de los metadatos de configuración basados ​​en XML, puede utilizar la init-methodatributo para especificar el nombre del método que tiene una firma sin argumentos nula. Por ejemplo

<bean id = "exampleBean" class = "examples.ExampleBean" init-method = "init"/>

A continuación se muestra la definición de clase:

public class ExampleBean {
   public void init() {
      // do some initialization work
   }
}

Devolución de llamada de destrucción

La interfaz org.springframework.beans.factory.DisposableBean especifica un método único:

void destroy() throws Exception;

Por lo tanto, simplemente puede implementar la interfaz anterior y el trabajo de finalización se puede realizar dentro del método destroy () de la siguiente manera:

public class ExampleBean implements DisposableBean {
   public void destroy() {
      // do some destruction work
   }
}

En el caso de los metadatos de configuración basados ​​en XML, puede utilizar la destroy-methodatributo para especificar el nombre del método que tiene una firma sin argumentos nula. Por ejemplo

<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>

A continuación se muestra la definición de clase:

public class ExampleBean {
   public void destroy() {
      // do some destruction work
   }
}

Si está utilizando el contenedor IoC de Spring en un entorno de aplicación que no sea web; por ejemplo, en un entorno de escritorio de cliente enriquecido, registra un gancho de cierre con la JVM. Hacerlo asegura un cierre elegante y llama a los métodos de destrucción relevantes en sus beans singleton para que se liberen todos los recursos.

Se recomienda que no utilice las devoluciones de llamada InitializingBean o DisposableBean, porque la configuración XML brinda mucha flexibilidad en términos de nombrar su método.

Ejemplo

Tengamos un IDE de Eclipse en funcionamiento y sigamos los siguientes pasos para crear una aplicación Spring:

Pasos Descripción
1 Cree un proyecto con un nombre SpringExample y cree un paquete com.tutorialspoint bajo elsrc carpeta en el proyecto creado.
2 Agregue las bibliotecas Spring requeridas usando la opción Agregar JAR externos como se explica en el capítulo Ejemplo de Spring Hello World .
3 Cree clases Java HelloWorld y MainApp en el paquete com.tutorialspoint .
4 Cree el archivo de configuración de Beans Beans.xml bajo elsrc carpeta.
5 El paso final es crear el contenido de todos los archivos Java y el archivo de configuración de Bean y ejecutar la aplicación como se explica a continuación.

Aquí está el contenido de HelloWorld.java archivo -

package com.tutorialspoint;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
   public void init(){
      System.out.println("Bean is going through init.");
   }
   public void destroy() {
      System.out.println("Bean will destroy now.");
   }
}

A continuación se muestra el contenido de la MainApp.javaarchivo. Aquí debe registrar un gancho de cierreregisterShutdownHook()método que se declara en la clase AbstractApplicationContext. Esto asegurará un cierre ordenado y llamará a los métodos de destrucción relevantes.

package com.tutorialspoint;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
      obj.getMessage();
      context.registerShutdownHook();
   }
}

A continuación se muestra el archivo de configuración Beans.xml requerido para los métodos de inicio y destrucción -

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" init-method = "init" 
      destroy-method = "destroy">
      <property name = "message" value = "Hello World!"/>
   </bean>

</beans>

Una vez que haya terminado de crear los archivos de configuración de fuente y bean, ejecutemos la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje:

Bean is going through init.
Your Message : Hello World!
Bean will destroy now.

Métodos predeterminados de inicialización y destrucción

Si tiene demasiados beans con métodos de inicialización y / o destrucción con el mismo nombre, no necesita declarar init-method y destroy-methoden cada frijol individual. En cambio, el marco proporciona la flexibilidad para configurar tal situación utilizandodefault-init-method y default-destroy-method atributos en el elemento <beans> de la siguiente manera:

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
   default-init-method = "init" 
   default-destroy-method = "destroy">

   <bean id = "..." class = "...">
      <!-- collaborators and configuration for this bean go here -->
   </bean>
   
</beans>