入口方法为createBean,其中两个关键逻辑如下
1.实例化前(1)实例化前逻辑如下
实例化前如果获取到了bean(开发者可以通过该扩展点自定义实例化bean),会直接调用初始化后的逻辑(与AOP有关)
InstantiationAwareBeanPostProcessor. postProcessBeforeInstantiation--------实例化前
BeanPostProcessor. postProcessAfterInitialization--------初始化后
2.Spring创建bean创建bean方法的几个关键处如下:
2.1 实例化bean
2,2 修改BeanDefinition的扩展点,可以自定义修改BeanDefinition
MergedBeanDefinitionPostProcessor. postProcessMergedBeanDefinition
2.3 属性填充InstantiationAwareBeanPostProcessor. postProcessAfterInstantiation---------实例化后逻辑
Spring自带的属性赋值
InstantiationAwareBeanPostProcessor. postProcessProperties----------处理@Autowried相关注入
处理pvs
2.4 初始化(1)初始化前
BeanPostProcessor. postProcessBeforeInitialization
(2)初始化
如果bean是InitializingBean的实例,调用其afterPropertiesSet方法
根据RootBeanDefinition中记录的开发者自定义的初始化方法来执行
(3)初始化后
BeanPostProcessor. postProcessAfterInitialization--------初始化后