05 - Ciclo de Vida do Spring Bean
Personalizando o Ciclo de Vida do Bean
Spring permite que você execute lógica personalizada durante o ciclo de vida do Bean, como:
- Executar código depois que o Bean for inicializado
- Executar código antes que o Bean seja destruído

Callbacks de Inicialização
A anotação @PostConstruct
O método é executado depois que todas as dependências foram injetadas.
new DatabaseService()
↓
Dependency Injection
↓
@PostConstruct
@Component
public class DatabaseService {
@PostConstruct
public void init() {
System.out.println("Connecting database...");
}
}
InitializingBean
InitializingBean é uma interface de ciclo de vida do Spring. O método afterPropertiesSet() é chamado depois que todas as propriedades do Bean foram definidas.
@Component
public class CacheService implements InitializingBean {
@Override
public void afterPropertiesSet(){
System.out.println("Cache initialized");
}
}
A anotação @PreDestroy
Quando o ApplicationContext é fechado, o Spring invoca métodos anotados com @PreDestroy antes de destruir o Bean.
Casos de uso típicos incluem:
- Fechar conexões de banco de dados
- Liberar recursos
- Parar threads em segundo plano
@Component
public class ConnectionPool {
@PreDestroy
public void shutdown() {
System.out.println("Closing connections");
}
}
DisposableBean
DisposableBean é uma interface de ciclo de vida do Spring. O método destroy() é invocado antes que o Bean seja removido do container.
@Component
public class Worker implements DisposableBean {
@Override
public void destroy(){
System.out.println("Stop worker threads.");
}
}
Melhor Prática
Na maioria das aplicações Spring Boot, prefira usar
@PostConstructe@PreDestroyem vez de implementarInitializingBeaneDisposableBean, pois as anotações mantêm suas classes menos acopladas ao Spring Framework.