Ответ
Да, управлять ключевыми этапами жизненного цикла бина в Spring можно, но не менять его полностью. Фреймворк предоставляет несколько механизмов для внедрения логики на этапах инициализации и уничтожения.
Основные способы:
-
Аннотации JSR-250 (рекомендуемый способ):
@Component public class MyService { @PostConstruct public void init() { // Выполняется после инъекции зависимостей System.out.println("Bean is initialized"); } @PreDestroy public void cleanup() { // Выполняется перед уничтожением бина System.out.println("Bean is being destroyed"); } } -
Интерфейсы Spring
InitializingBeanиDisposableBean:@Component public class MyService implements InitializingBean, DisposableBean { @Override public void afterPropertiesSet() { // Аналог @PostConstruct } @Override public void destroy() { // Аналог @PreDestroy } } -
Указание методов в конфигурации Java/XML:
@Configuration public class AppConfig { @Bean(initMethod = "setup", destroyMethod = "teardown") public DataSource dataSource() { return new HikariDataSource(); } }
Для полного и низкоуровневого контроля над процессом создания бинов можно реализовать интерфейс BeanPostProcessor. Это позволяет выполнять произвольную логику до и после инициализации каждого бина в контейнере.