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) { |