@PostConstruct, @PreDestroy e initMethod, destroyMethod, InitializingBean, Conceptos desechablesBean, diferencias y orden de ejecución

@PostConstruct, @PreDestroy e initMethod, destroyMethod, InitializingBean, Conceptos desechablesBean, diferencias y orden de ejecución

@PostConstruct

Definición relacionada

  1. Esta anotación se agrega en la especificación Java EE5, no en Spring. Spring se refiere a seguir esta especificación y tiene un rol determinado en el ciclo de vida del Servlet. Por lo general, se trata de algunas operaciones de inicialización, pero la inicialización puede depender de otros componentes inyectados. , así que espere hasta todas las dependencias se cargan antes de ejecutar
  2. La anotación @PostConstruct se usa para métodos ejecutados después de que se completa la inyección de dependencia
  3. Los métodos pueden ser modificados con final

uso

Declarar un método void en una clase, por supuesto, puede ser de otros tipos, pero no tiene ningún significado práctico, generalmente es un método void no estático.

 @PostConstruct
    public final  void initForPostConstruct(){
    
    
        System.out.println("initForPostConstruct 方法执行了!");
    }

@PreDestroy

Definición relacionada

  1. Esta anotación también se agrega en la especificación Java EE5, no en Spring. Spring significa que seguir esta especificación tiene un cierto papel en el ciclo de vida del Servlet. Por lo general, se trata de algunas operaciones antes de la destrucción.
  2. La anotación @PreDestroy se usa como una notificación de devolución de llamada en el método para indicar que el contenedor está eliminando la instancia.
  3. Un método anotado con @PreDestroy generalmente se usa para liberar los recursos que ha estado reteniendo o para hacer la recolección de basura.
  4. Los métodos pueden ser modificados con final

uso

Al igual que @PostConstruct, declare un método void en la clase, por supuesto, puede ser de otros tipos, pero no tiene importancia práctica, generalmente es un método void no estático

 @PreDestroy
    public void destroyForPreDestroy(){
    
    
        System.out.println("destroyForPreDestroy 方法执行了!");
    }

initMethod ydestroyMethod

Definición relacionada

Después de inicializar un objeto (bean), inicialice y cargue algunos datos inmediatamente, y realice algunas operaciones de liberación de recursos y recolección de basura antes de destruir el objeto.

uso

xml, defina los métodos init y destroy en la clase correspondiente al bean, y use la asociación init-method y destroy-method en xml

    public void initForInitMethod (){
    
    
        System.out.println("initForInitMethod 方法执行了!");
    }

    public void destroyFordestroyMethod(){
    
    
        System.out.println("destroyFordestroyMethod 方法执行了!");
    }
<?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.xsd">  

<bean id="initOrDestroyTest" class="com.cyyit.bean.TestBean" init-method="init" destroy-method="destroy">
</bean>
</beans>

El método javaConfig, el efecto es equivalente al método xml

@Configuration
public class config {
    
    
    @Bean(initMethod = "initForInitMethod",destroyMethod ="destroyFordestroyMethod")
    public TestBean testBean(){
    
    
        return  new TestBean();
    }
}

InitializingBean

La interfaz IinitializingBean proporciona un método de inicialización para beans. Solo incluye el método afterPropertiesSet. Todas las clases que heredan esta interfaz ejecutarán este método al inicializar el bean.

DisposableBean

La interfaz de DisabledBean proporciona una forma para que los beans destruyan el método Bean. Solo incluye el método de destrucción. Todas las clases que heredan esta interfaz ejecutarán este método cuando destruyan el bean.

orden de ejecución

Prueba: defina un TestBean de la siguiente manera

public class TestBean implements InitializingBean, DisposableBean {
    
    
    private String name;
    private Integer age;
    @Autowired
    private TestBean1 testBean1;

    @PostConstruct
    public final  void initForPostConstruct(){
    
    
        System.out.println("initForPostConstruct 方法执行了!");
    }

    @PreDestroy
    public void destroyForPreDestroy(){
    
    
        System.out.println("destroyForPreDestroy 方法执行了!");
    }

    public void initForInitMethod (){
    
    
        System.out.println("initForInitMethod 方法执行了!");
    }

    public void destroyFordestroyMethod(){
    
    
        System.out.println("destroyFordestroyMethod 方法执行了!");
    }

    @Override
    public void destroy() throws Exception {
    
    
        System.out.println("destroy 方法执行了!");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
    
    
        System.out.println("afterPropertiesSet 方法执行了!");
    }
}

Ejecución de la función principal ejecutando resultados:
inserte la descripción de la imagen aquí
Conclusión: Como se puede ver en lo anterior, de hecho, los tres métodos se utilizan para realizar algunas operaciones relacionadas en las fases de inicialización y destrucción en el ciclo de vida de springBean. Configure según sea necesario. Además , @PostConstruct y @PreDestroy son anotaciones propias de Java, no de Spring. Spring simplemente sigue esa especificación. Las tres secuencias de ejecución son:

Inicialización: @PostConstruct>InitializingBean>initMethod

Destruir: @PreDestroy>DisposableBean>destroyMethod

Supongo que te gusta

Origin blog.csdn.net/qq_38338409/article/details/120605901
Recomendado
Clasificación