)5.1 执行BeanFactoryPostProcessors的方法,先执行其子接口,然后再执行自己的接口
)5.1.1 获取所有的BeanDefinitionRegistryPostProcessor
)5.1.2 按照优先级执行BeanDefinitionRegistryPostProcessor后置处理器
)5.1.2 按照优先级执行BeanFactoryPostProcessors后置处理器,与上面的流程一样
先获取所有,再按照优先级挨个执行
[](
)6. registerBeanPostProcessors: 注册BeanPostProcessors(Bean的后置处理器,来拦截Bean的创建过程)
)6.1 注册步骤如下:
[](
)7.initMessageSource(): 初始化MessageSource(做国际化,消息绑定,消息解析)
messaegSource:取出国际化配置文件中某个Key的值,能按照区域信息获取
[](
)8 initApplicationEventMulticaster() :初始化事件派发器
如果我们需要使用事件派发器,可以选择往容器中放一个,或者直接注入使用spring提供的简单的事件派发器
[](
)9 onRefresh() :留给子容器(子类)
例如可以给容器中多注册一些组件
[](
)10. registerListeners(): 将项目中所有ApplicationListener的监听器注册起来
[](
)11.finishBeanFactoryInitialization(beanFactory): 初始化所有剩下的单实例bean
)11.1 preInstantiateSingletons()初始化剩下的所有单实例bean
这里如果在通过id获取对应bean时,id前面加上&,则会帮我们获取到工厂本身的bean,否则返回对应的bean
)11.1.1 getBean的流程
缓存的map如下:
dogetBean方法中尝试从缓存中获取完单实例bean后:
)11.1.1 createBean()方法流程:
)11.1.1 resolveBeforeInstantiation: 后置处理器,在bean没创建前进行拦截
)11.1.2 后置拦截器拦截完bean的创建,没有返回代理对象后,执行bean的创建流程,下面研究:docreateBean()的流程
createBeanInstance方法探究:
继续:
populateBean方法探究
为bean赋值过程小总结:
initializeBean()方法探究:bean的初始化
回到createBean的方法上来:
然后返回创建完的对象
[](
)重点的docreate()方法总结:
创建bean实例—>调用BeanDefinitionPostProcessors—>
Bean属性赋值—>调用InstantiationAwareBeanPostProcessor–>
Bean初始化—>调用BeanPostProcessor
返回创建好的bean
小编精心为大家准备了一手资料
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](
)**
【附】架构书籍
BATJ面试要点及Java架构师进阶资料
最后
小编精心为大家准备了一手资料
[外链图片转存中…(img-NF9vfZX4-1631184884362)]
[外链图片转存中…(img-fwNHHgYO-1631184884363)]
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](
)**
【附】架构书籍
[外链图片转存中…(img-0IK5dQqF-1631184884365)]
BATJ面试要点及Java架构师进阶资料
[外链图片转存中…(img-F1uC2H6x-1631184884366)]