1. Въведение
Spring ни позволява да прикачваме персонализирани действия за създаване и унищожаване на боб. Можем например да го направим чрез прилагане на интерфейсите InitializingBean и DisposableBean .
В този кратък урок ще разгледаме втора възможност: анотациите @PostConstruct и @PreDestroy .
2. @PostConstruct
Spring извиква методи, анотирани с @PostConstruct само веднъж, непосредствено след инициализирането на свойствата на боб . Имайте предвид, че тези методи ще работят дори ако няма какво да се инициализира.
Методът, анотиран с @PostConstruct, може да има всяко ниво на достъп, но не може да бъде статичен.
Един пример за използване на @PostConstruct е попълването на база данни. По време на разработката, например, може да искаме да създадем някои потребители по подразбиране:
@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); } }
Горният пример първо ще инициализира UserRepository и след това ще изпълни метода @PostConstruct .
3. @PreDestroy
Метод, анотиран с @PreDestroy, се изпълнява само веднъж, точно преди Spring да премахне нашия боб от контекста на приложението.
Подобно на @PostConstruct , методите, коментирани с @PreDestroy, могат да имат всяко ниво на достъп, но не могат да бъдат статични.
@Component public class UserRepository { private DbConnection dbConnection; @PreDestroy public void preDestroy() { dbConnection.close(); } }
Целта на този метод трябва да бъде да освободи ресурси или да изпълни каквито и да било други задачи за почистване преди бобът да бъде унищожен, например затваряне на връзка с база данни.
4. Java 9+
Обърнете внимание, че както @PostConstruct , така и @PreDestroy анотациите са част от Java EE. И тъй като Java EE е оттеглена в Java 9 и премахната в Java 11, трябва да добавим допълнителна зависимост, за да използваме тези пояснения:
javax.annotation javax.annotation-api 1.3.2
5. Заключение
В този кратък урок научихме как да използваме @PostConstruct и @PreDestroy анотации.
Както винаги целият изходен код е достъпен в GitHub.