@PostConstruct, @PreDestroy e initMethod, destroyMethod, InitializingBean, DisposableBean conceitos, diferenças e ordem de execução

@PostConstruct, @PreDestroy e initMethod, destroyMethod, InitializingBean, DisposableBean conceitos, diferenças e ordem de execução

@PostConstruct

Definição relacionada

  1. Esta anotação é adicionada na especificação Java EE5, não spring. Spring refere-se a seguir esta especificação e tem um certo papel no ciclo de vida do Servlet. Geralmente são algumas operações de inicialização, mas a inicialização pode depender de outros componentes injetados. , então espere até todas as dependências são carregadas antes de executar
  2. A anotação @PostConstruct é usada para métodos executados após a conclusão da injeção de dependência
  3. Os métodos podem ser modificados com final

uso

Declare um método void em uma classe, claro, pode ser de outros tipos, mas não tem significado prático.Geralmente, é um método void não estático.

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

@PreDestroy

Definição relacionada

  1. Esta anotação também é adicionada na especificação Java EE5, não Spring.Spring significa que seguir esta especificação tem um certo papel no ciclo de vida do Servlet.Geralmente são algumas operações antes da destruição.
  2. A anotação @PreDestroy é usada como uma notificação de retorno de chamada no método para indicar que a instância está sendo excluída pelo contêiner
  3. Um método anotado com @PreDestroy geralmente é usado para liberar recursos que ele mantém ou para fazer a coleta de lixo
  4. Os métodos podem ser modificados com final

uso

Assim como @PostConstruct, declare um método void na classe, claro, pode ser de outros tipos, mas não tem significado prático, geralmente é um método void não estático

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

initMethod和destroyMethod

Definição relacionada

Depois de inicializar um objeto (bean), inicialize e carregue alguns dados imediatamente e faça algumas operações de liberação de recursos e coleta de lixo antes de destruir o objeto

uso

xml, defina os métodos init e destroy na classe correspondente ao bean e use a associação init-method e destroy-method em 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>

O método javaConfig, o efeito é equivalente ao método xml

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

Inicializando Bean

A interface IinitializingBean fornece um método de inicialização para beans. Inclui apenas o método afterPropertiesSet. Todas as classes que herdam esta interface irão executar este método ao inicializar o bean.

Feijão Descartável

A interface DisposableBean fornece uma maneira para os beans destruirem o método Bean. Ela inclui apenas o método destroy. Todas as classes que herdam esta interface irão executar este método ao destruir o bean.

ordem de execução

Teste: Defina um TestBean da seguinte forma

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 方法执行了!");
    }
}

A execução dos resultados da execução da função principal:
insira a descrição da imagem aqui
Conclusão: Como pode ser visto acima, de fato, os três métodos são usados ​​para realizar algumas operações relacionadas nas fases de inicialização e destruição no ciclo de vida do springBean. Configure conforme necessário. Além disso , @PostConstruct e @PreDestroy são anotações do próprio Java, não do Spring. O Spring apenas segue tal especificação. As três sequências de execução são:

Inicialização: @PostConstruct>InitializingBean>initMethod

Destruir: @PreDestroy>DisposableBean>destroyMethod

Acho que você gosta

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