一个Bean从创建到销毁,会经过一系列的生命周期阶段,每个阶段spring都提供了方式让我们能够介入,从而可以修改bean的配置、状态和行为等。
bean构建触发时机
- 应用上下文启动过程中
- 应用上下文运行中
完整流程
-
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
-
实例化
-
MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
- 可以修改初始化该bean即将使用的配置元数据
-
InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
-
处理属性自动注入模式,查找依赖并填充到
BeanDefinition
的PropertyValues
中- 根据javabean属性元数据,找到需要自动注入的属性
- 调用IoC容器解析依赖值
- 将依赖值增加到
PropertyValues
中
-
InstantiationAwareBeanPostProcessor#postProcessProperties
-
可以替换初始化该bean即将使用的配置元数据
-
@Autowired
-
@Value
-
@Resource
-
-
Set方法注入:applyPropertyValues
- 使用
BeanDefinition
的PropertyValues
初始化bean属性
- 使用
-
调用bean实现的Aware方法
BeanNameAware
BeanFactoryAware
-
BeanPostProcessor#postProcessBeforeInitialization
PostConstruct
-
调用初始化方法
InitializingBean#afterPropertiesSet
- 自定义方法
-
BeanPostProcessor#postProcessAfterInitialization
-
SmartInitializingSingleton#afterSingletonsInstantiated
- 用于非延迟初始化地单例bean
-
DisposableBeanAdapter
销毁方法适配器-
DestructionAwareBeanPostProcessor#postProcessBeforeDestruction
@PreDestroy
-
DisposableBean
-
自定义销毁方法
- destroy()
- close()
- shutdown()
- 其他
-
感知上下文生命周期
-
通过监听上下文生命周期事件
ContextRefreshedEvent
ContextClosedEvent
ContextStartedEvent
ContextStoppedEvent
-
实现
Lifecycle
接口提供精确控制bean服务的方式,如启动、暂停等
Lifecycle
SmartLifecycle
网友评论