spring--Bean的生命周期
Spring bean 的生命周期涉及多个阶段,从创建到销毁。下面是一个简化的生命周期描述:
-
Bean 定义:
- 首先,Spring 根据配置(XML、注解或 Java 配置)创建一个 bean 的定义。
-
Bean 实例化:
- Spring 容器使用构造器或工厂方法实例化 bean。
-
属性填充:
- Spring 容器通过反射机制,将所有的属性值注入到 bean 中。
-
BeanNameAware 和 BeanFactoryAware:
- 如果 bean 实现了
BeanNameAware接口,Spring 将 bean 的 ID 传递给setBeanName()方法。 - 如果 bean 实现了
BeanFactoryAware接口,Spring 将调用setBeanFactory()方法,将BeanFactory容器实例传入。
- 如果 bean 实现了
-
BeanPostProcessor 前置处理:
- Spring 容器调用
BeanPostProcessor接口的postProcessBeforeInitialization()方法,可以在此对 bean 进行一些处理。
- Spring 容器调用
-
InitializingBean 和自定义 init 方法:
- 如果 bean 实现了
InitializingBean接口,Spring 将调用其afterPropertiesSet()方法。 - 如果 bean 在配置中定义了 init 方法,该方法也会被调用。
- 如果 bean 实现了
-
BeanPostProcessor 后置处理:
- Spring 容器调用
BeanPostProcessor接口的postProcessAfterInitialization()方法,可以在此对 bean 进行一些处理。
- Spring 容器调用
-
Bean 准备就绪:
- 此时,bean 已经准备好可以被应用程序使用了。
-
DisposableBean 和自定义 destroy 方法:
- 当容器关闭时,如果 bean 实现了
DisposableBean接口,Spring 将调用其destroy()方法。 - 如果 bean 在配置中定义了 destroy 方法,该方法也会被调用。
- 当容器关闭时,如果 bean 实现了
-
Bean 销毁:
- 最后,bean 被销毁,不再可用。
在实际应用中,Spring bean 的生命周期可能会更加复杂,因为还可以通过监听器(如 ContextRefreshedEvent、ContextClosedEvent 等)来执行特定的逻辑。
理解 Spring bean 的生命周期对于管理资源、处理初始化和清理工作以及优化应用性能等方面都是很重要的。开发者可以通过实现特定的接口或使用注解(如 @PostConstruct 和 @PreDestroy)来介入生命周期的不同阶段,执行自定义的逻辑。