Расскажите о жизненном цикле Spring Bean.
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Жизненный цикл Spring Bean
JavaScript Spring Bean — это ключевая концепция фреймворка Spring, и понимание её критично для Java-разработчика. Жизненный цикл описывает, как Spring создаёт, инициализирует, использует и уничтожает объекты Bean в контексте приложения.
Этапы жизненного цикла
1. Instantiation (Создание экземпляра) Spring создаёт экземпляр Bean, используя конструктор. На этом этапе ещё не устанавливаются зависимости.
public class MyBean {
public MyBean() {
System.out.println("Bean instantiated");
}
}
2. Dependency Injection (Внедрение зависимостей) Spring внедряет зависимости через setter или конструктор.
@Component
public class MyService {
private MyRepository repository;
@Autowired
public void setRepository(MyRepository repository) {
this.repository = repository;
}
}
3. Aware Callbacks
Если Bean реализует интерфейсы *Aware, вызываются соответствующие методы:
BeanNameAware— предоставляет имя BeanBeanFactoryAware— предоставляет BeanFactoryApplicationContextAware— предоставляет ApplicationContext
@Component
public class MyBean implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext ctx) {
System.out.println("Context set");
}
}
4. BeanPostProcessor.postProcessBeforeInitialization() Обработчик вызывается перед инициализацией Bean.
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String name) {
System.out.println("Before init: " + name);
return bean;
}
}
5. InitializingBean / @PostConstruct Вызывается метод инициализации Bean. Может быть реализован двумя способами:
// Способ 1: реализация интерфейса InitializingBean
@Component
public class MyBean implements InitializingBean {
@Override
public void afterPropertiesSet() {
System.out.println("Bean initialized");
}
}
// Способ 2: аннотация @PostConstruct
@Component
public class MyService {
@PostConstruct
public void init() {
System.out.println("Initialization method");
}
}
6. BeanPostProcessor.postProcessAfterInitialization() Обработчик вызывается после инициализации Bean.
@Override
public Object postProcessAfterInitialization(Object bean, String name) {
System.out.println("After init: " + name);
return bean;
}
Использование Bean
После инициализации Bean готов к использованию в приложении.
Уничтожение Bean
При завершении работы приложения Spring вызывает методы уничтожения:
@Component
public class MyService implements DisposableBean {
@PreDestroy
public void destroy() {
System.out.println("Bean destroyed");
}
@Override
public void destroy() throws Exception {
System.out.println("Cleanup resources");
}
}
Пример полного цикла
@Component
public class LifecycleDemoBean implements InitializingBean, DisposableBean {
public LifecycleDemoBean() {
System.out.println("1. Constructor called");
}
@Autowired
private SomeDependency dependency;
@Override
public void afterPropertiesSet() {
System.out.println("3. InitializingBean method called");
}
@PostConstruct
public void postConstruct() {
System.out.println("2. PostConstruct method called");
}
@PreDestroy
public void preDestroy() {
System.out.println("4. PreDestroy method called");
}
@Override
public void destroy() {
System.out.println("5. DisposableBean destroy method called");
}
}
Практическое применение
Понимание жизненного цикла позволяет корректно инициализировать ресурсы, управлять подключениями к БД, запускать фоновые процессы и правильно освобождать ресурсы при завершении приложения.