Анотации на Spring PostConstruct и PreDestroy

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.