1. Introducción
Spring nos permite adjuntar acciones personalizadas a la creación y destrucción de beans. Podemos, por ejemplo, hacerlo implementando las interfaces InitializingBean y DisposableBean .
En este breve tutorial, veremos una segunda posibilidad: las anotaciones @PostConstruct y @PreDestroy .
2. @PostConstruct
Spring llama a métodos anotados con @PostConstruct solo una vez, justo después de la inicialización de las propiedades del bean . Tenga en cuenta que estos métodos se ejecutarán incluso si no hay nada que inicializar.
El método anotado con @PostConstruct puede tener cualquier nivel de acceso pero no puede ser estático.
Un ejemplo de uso de @PostConstruct es llenar una base de datos. Durante el desarrollo, por ejemplo, es posible que queramos crear algunos usuarios predeterminados:
@Component public class DbInit { @Autowired private UserRepository userRepository; @PostConstruct private void postConstruct() { User admin = new User("admin", "admin password"); User normalUser = new User("user", "user password"); userRepository.save(admin, normalUser); } }
El ejemplo anterior primero inicializará UserRepository y luego ejecutará el método @PostConstruct .
3. @PreDestroy
Un método anotado con @PreDestroy se ejecuta solo una vez, justo antes de que Spring elimine nuestro bean del contexto de la aplicación.
Al igual que con @PostConstruct , los métodos anotados con @PreDestroy pueden tener cualquier nivel de acceso pero no pueden ser estáticos.
@Component public class UserRepository { private DbConnection dbConnection; @PreDestroy public void preDestroy() { dbConnection.close(); } }
El propósito de este método debería ser liberar recursos o realizar cualquier otra tarea de limpieza antes de que se destruya el bean, por ejemplo, cerrar una conexión a la base de datos.
4. Java 9+
Tenga en cuenta que las anotaciones @PostConstruct y @PreDestroy son parte de Java EE. Y dado que Java EE ha quedado obsoleto en Java 9 y eliminado en Java 11, tenemos que agregar una dependencia adicional para usar estas anotaciones:
javax.annotation javax.annotation-api 1.3.2
5. Conclusión
En este breve tutorial, hemos aprendido cómo usar las anotaciones @PostConstruct y @PreDestroy .
Como siempre, todo el código fuente está disponible en GitHub.