注意在每一步大操作之前都有一个前期准备
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)
方法通常包括以下步骤:
实例化非懒加载的单例Bean:遍历所有非懒加载的单例Bean定义,在Bean工厂中创建它们的实例,并将它们放入容器中。这些Bean将在容器启动时立即实例化。
执行Bean的初始化方法:对于每个实例化的Bean,调用其初始化方法。初始化方法可以通过实现
InitializingBean
接口的afterPropertiesSet()
方法,或者通过在Bean定义中指定的自定义初始化方法来定义。注册Bean后处理器(BeanPostProcessor):将所有注册的
BeanPostProcessor
实现类应用于所有已实例化的Bean。BeanPostProcessor
可以在Bean实例化后对其进行自定义的初始化和修改。完成Bean工厂的初始化:标记Bean工厂为已完成初始化状态。这表示所有Bean的实例化、初始化和后处理工作已经完成,容器已准备好供应用程序使用。
总之,
finishBeanFactoryInitialization(beanFactory)
方法负责完成Spring IoC容器中所有注册Bean的实例化和初始化过程,确保容器中的所有Bean都已准备就绪,可以供应用程序使用。
spring当中带do开头的方法,也就是事件干活的方法