Bean生命周期的大致过程:实例化→属性注入→初始化→销毁
本文主要探讨一下初始化这个过程:
初始化生命钩子
该阶段主要做bean的初始化操作,包括:回调Aware接口、回调初始化方法、生成代理对象等:
回调
Aware
接口包括
BeanNameAware
、BeanFactoryAware
等BeanPostProcessors
前置处理器ApplicationContextAwareProcessor
:回调一些Aware接口,如:ApplicationContextAware
:注入context
对象EnvironmentAware
:注入Environment
对象
InitDestroyAnnotationBeanPostProcessor
:调用@PostConstruct
标注的方法
回调初始化方法
initializingBean
的afterPropertiesSet()
- Bean的
init-method
BeanPostProcessors
后置处理器常用于返回代理对象。
其中
AbstractAutoProxyCreator
和AbstractAdvisingBeanPostProcessor
都有可能产生代理对象,如:AsyncAnnotationBeanPostProcessor
:对@Async
进行代理InfrastructureAdvisorAutoProxyCreator
:对@Transactional
进行代理
把最终生成的代理对象放入单例池(源码中叫做
singletonObjects
)中
源码解析
1 | protected Object initializeBean(String beanName, Object bean, { RootBeanDefinition mbd) |