@PostConstruct, @PreDestroy e initMethod, destroyMethod, InitializingBean, Conceptos desechablesBean, diferencias y orden de ejecución
@PostConstruct
Definición relacionada
- 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
- La anotación @PostConstruct se usa para métodos ejecutados después de que se completa la inyección de dependencia
- 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
- 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.
- 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.
- 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.
- 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:
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