refresh大揽

注意在每一步大操作之前都有一个前期准备

prepareRefresh()

设置spring启动的时间

设置spring关闭和开启的标志位

获取环境对象,并设置一些属性值,是系统环境的不是xml设置的

设置监听器,以及需要发布事件的集合。

        

ConfigurableListableBeanFactory beanFactary = obtainFreshBeanFactory(); 我创建的一定是个新工厂

创建容器对象:DefaultListableFactory

加载xml配置文件的属性值到当前工厂中,最重要的是BeanDefinition

ConfigurableListableBeanFactory beanFactary = obtainFreshBeanFactory()

spring bean创建总览 1_肥春勿扰的博客-CSDN博客

回想我们之前说的那张图,其实一切的开始就是从你这个工厂开始的 获得一个刷新的bean容器。

在BeanFactory接口中 提到了ListableBeanFactory 和ConfigurableBeanFactory 这是两个比较重要的子接口,再看DefaultListableBeanFactory类图,而这个类是我们经常用的。

 我们找bean的时候先向子容器,在向父容器中找。

生的枝叶,我们dogetbean方法里就有一个,去查找他的父容器

 ListableBeanFactory 我们看他的介绍

   ConfigurableBeanFactory介绍

里面有一堆的set方法,就可以填充一些对应的属性值了。

为什么类图折磨复杂?

扩展性

创建出工厂之后 我们开始读配置文件了

当前工厂设置好了,我们设置一些参数值

我们会设值一些序列化id值啊,定制化bean工厂啊?加载bean的定义信息,也就是解析配置文件了。里边很多重载,每次重载参数不一样,因为你的配置文件不只有一个。

这是一个重载的方法,里面会有不同reader

此时该走增强器了

prepareBeanFactory

 这里的ignoreDependencyInterface 忽略某个接口的实现。忽略aware(获取容器中某个对象的,只要实现了某个对象的aware接口,那么就有了这个对象的功能)

这一点为甚末忽略他,这时候后并没有初始化完整,所以这忽视过去,我们载设置aware属性的时候载调用invokeAwareMethod 设置aware接口的属性。载我们纵览的那种图上有

总结

完成bean工厂的初始化操作。

postProcessBeanFactory(beanFactory)

点进代码时空的,说明他可以扩展是是实现。

invokeBeanFactoryPostProcessors(beanFactory)

修改bean的注册信息

 注意看你这个bfpp也是个bean也就是我们那个spring的内置定义

单例对象实例化之前一定要调用。这里想想为什么

 也就是把上图个执行完。

这时候有有一个前期准呗了

registerBeanPostProcessors(beanFactory)

 注意和上边那个方法的定义。

相当于这一步也是一个准备工作

initMessageSource()

这东西就是一个国际化的操作。

initApplicationEventMulticaster()

初始化对应事件的广播器

OnRefresh()

空方法实现,二次开发

registerListeners

注册监听器

finishBeanFactoryInitialization(beanFactory)

也就是这

只看关键步骤里边方法

在Spring中,finishBeanFactoryInitialization(beanFactory)方法用于完成Bean工厂的初始化过程。它是Spring IoC容器在启动阶段中的最后一步,用于完成所有注册的Bean的实例化和初始化。

具体而言,finishBeanFactoryInitialization(beanFactory)方法通常包括以下步骤:

  1. 实例化非懒加载的单例Bean:遍历所有非懒加载的单例Bean定义,在Bean工厂中创建它们的实例,并将它们放入容器中。这些Bean将在容器启动时立即实例化。

  2. 执行Bean的初始化方法:对于每个实例化的Bean,调用其初始化方法。初始化方法可以通过实现InitializingBean接口的afterPropertiesSet()方法,或者通过在Bean定义中指定的自定义初始化方法来定义。

  3. 注册Bean后处理器(BeanPostProcessor):将所有注册的BeanPostProcessor实现类应用于所有已实例化的Bean。BeanPostProcessor可以在Bean实例化后对其进行自定义的初始化和修改。

  4. 完成Bean工厂的初始化:标记Bean工厂为已完成初始化状态。这表示所有Bean的实例化、初始化和后处理工作已经完成,容器已准备好供应用程序使用。

总之,finishBeanFactoryInitialization(beanFactory)方法负责完成Spring IoC容器中所有注册Bean的实例化和初始化过程,确保容器中的所有Bean都已准备就绪,可以供应用程序使用。

spring当中带do开头的方法,也就是事件干活的方法

猜你喜欢

转载自blog.csdn.net/qq_52988841/article/details/132394856
今日推荐