一个Bean从创建到销毁,会经过一系列的生命周期阶段,每个阶段spring都提供了方式让我们能够介入,从而可以修改bean的配置、状态和行为等。
bean构建触发时机
- 应用上下文启动过程中
- 应用上下文运行中
bean生命周期.png
完整流程
-
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方法
BeanNameAwareBeanFactoryAware
-
BeanPostProcessor#postProcessBeforeInitializationPostConstruct
-
调用初始化方法
InitializingBean#afterPropertiesSet- 自定义方法
-
BeanPostProcessor#postProcessAfterInitialization -
SmartInitializingSingleton#afterSingletonsInstantiated- 用于非延迟初始化地单例bean
-
DisposableBeanAdapter销毁方法适配器-
DestructionAwareBeanPostProcessor#postProcessBeforeDestruction@PreDestroy
-
DisposableBean -
自定义销毁方法
- destroy()
- close()
- shutdown()
- 其他
-
感知上下文生命周期
-
通过监听上下文生命周期事件
ContextRefreshedEventContextClosedEventContextStartedEventContextStoppedEvent
-
实现
Lifecycle接口提供精确控制bean服务的方式,如启动、暂停等
LifecycleSmartLifecycle












网友评论