Рубрики
Без рубрики

Аннотации весеннего постконструкта и предопределения

Узнайте о аннотациях жизненного цикла Spring PostConstruct и PreDestroy.

Автор оригинала: baeldung.

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 удалит ваш компонент из applicationcontext.

Как и в случае с @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 .