@PostConstruct, @PreDestroy e initMethod, destroyMethod, InitializingBean, DisposableBean conceitos, diferenças e ordem de execução
@PostConstruct
Definição relacionada
- 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
- A anotação @PostConstruct é usada para métodos executados após a conclusão da injeção de dependência
- 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
- 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.
- 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
- Um método anotado com @PreDestroy geralmente é usado para liberar recursos que ele mantém ou para fazer a coleta de lixo
- 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:
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