编程语言
首页 > 编程语言> > Spring创建和初始化的源码流程分析,真牛

Spring创建和初始化的源码流程分析,真牛

作者:互联网

在这里插入图片描述


[](

)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面试题解析+核心总结学习笔记+最新讲解视频】](

)**

【附】架构书籍

  1. BAT面试的20道高频数据库问题解析
  2. Java面试宝典
  3. Netty实战
  4. 算法

BATJ面试要点及Java架构师进阶资料


最后

小编精心为大家准备了一手资料

[外链图片转存中…(img-NF9vfZX4-1631184884362)]

[外链图片转存中…(img-fwNHHgYO-1631184884363)]

以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](

)**

【附】架构书籍

  1. BAT面试的20道高频数据库问题解析
  2. Java面试宝典
  3. Netty实战
  4. 算法

[外链图片转存中…(img-0IK5dQqF-1631184884365)]

BATJ面试要点及Java架构师进阶资料

[外链图片转存中…(img-F1uC2H6x-1631184884366)]

标签:初始化,Java,Spring,11.1,架构,bean,源码,创建,真牛
来源: https://blog.csdn.net/m0_61452073/article/details/120207515