@PostConstruct, @PreDestroy et initMethod, destroyMethod, InitializingBean, DisposableBean concepts, différences et ordre d'exécution

@PostConstruct, @PreDestroy et initMethod, destroyMethod, InitializingBean, DisposableBean concepts, différences et ordre d'exécution

@PostConstruct

Lié à la définition

  1. 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
  2. L'annotation @PostConstruct est utilisée pour les méthodes exécutées une fois l'injection de dépendance terminée
  3. 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

  1. 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.
  2. 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
  3. 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.
  4. 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 :
insérez la description de l'image ici
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

Je suppose que tu aimes

Origine blog.csdn.net/qq_38338409/article/details/120605901
conseillé
Classement