@PostConstruct, @PreDestroy et initMethod, destroyMethod, InitializingBean, DisposableBean concepts, différences et ordre d'exécution
@PostConstruct
Lié à la définition
- Cette annotation est ajoutée dans la spécification Java EE5, pas dans le printemps. Spring fait référence au respect de cette spécification et joue un certain rôle dans le cycle de vie du servlet. Il s'agit généralement d'opérations d'initialisation, mais l'initialisation peut dépendre d'autres composants injectés. , alors attendez jusqu'à toutes les dépendances sont chargées avant l'exécution
- L'annotation @PostConstruct est utilisée pour les méthodes exécutées une fois l'injection de dépendance terminée
- Les méthodes peuvent être modifiées avec la version finale
usage
Déclarer une méthode void dans une classe, bien sûr, elle peut être d'autres types, mais cela n'a aucune signification pratique.Généralement, c'est une méthode void non statique.
@PostConstruct
public final void initForPostConstruct(){
System.out.println("initForPostConstruct 方法执行了!");
}
@PreDestroy
Lié à la définition
- Cette annotation est également ajoutée dans la spécification Java EE5, pas dans le printemps. Le printemps signifie que le respect de cette spécification a un certain rôle dans le cycle de vie du servlet. Il s'agit généralement de certaines opérations avant la destruction.
- L'annotation @PreDestroy est utilisée comme notification de rappel sur la méthode pour indiquer que l'instance est en cours de suppression par le conteneur
- Une méthode annotée avec @PreDestroy est généralement utilisée pour libérer les ressources qu'elle a détenues ou pour effectuer un ramasse-miettes.
- Les méthodes peuvent être modifiées avec la version finale
usage
Comme @PostConstruct, déclarez une méthode void dans la classe, bien sûr, elle peut être d'autres types, mais elle n'a aucune signification pratique, généralement c'est une méthode void non statique
@PreDestroy
public void destroyForPreDestroy(){
System.out.println("destroyForPreDestroy 方法执行了!");
}
initMethod et destroyMethod
Lié à la définition
Après avoir initialisé un objet (bean), initialisez et chargez immédiatement certaines données, et effectuez des opérations de libération de ressources et de récupération de place avant de détruire l'objet
usage
xml, définissez les méthodes init et destroy dans la classe correspondant au bean, et utilisez l'association init-method et destroy-method dans 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>
La méthode javaConfig, l'effet est équivalent à la méthode xml
@Configuration
public class config {
@Bean(initMethod = "initForInitMethod",destroyMethod ="destroyFordestroyMethod")
public TestBean testBean(){
return new TestBean();
}
}
InitializingBean
L'interface IinitializingBean fournit une méthode d'initialisation pour les beans. Elle inclut uniquement la méthode afterPropertiesSet. Toutes les classes qui héritent de cette interface exécuteront cette méthode lors de l'initialisation du bean.
JetableBean
L'interface DisposableBean permet aux beans de détruire la méthode Bean. Elle n'inclut que la méthode destroy. Toutes les classes qui héritent de cette interface exécuteront cette méthode lors de la destruction du bean.
ordre d'exécution
Test : Définissez un TestBean comme suit
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 方法执行了!");
}
}
Exécution des résultats de l'exécution de la fonction principale :
Conclusion : Comme on peut le voir ci-dessus, en fait, les trois méthodes sont utilisées pour effectuer certaines opérations liées dans les phases d'initialisation et de destruction du cycle de vie de springBean. Configurez selon vos besoins. De plus , @PostConstruct et @PreDestroy sont les propres annotations de Java, pas celles de Spring. Spring suit simplement une telle spécification. Les trois séquences d'exécution sont :
Initialisation : @PostConstruct>InitializingBean>initMethod
Détruire : @PreDestroy>DisposableBean>destroyMethod