**
总体流程图
**
三级缓存
三级缓存的精讲
**
容器和对象的创建流程
**
先创建容器 然后通过BeanDefinitionReader来生成一个BeanDefinition(Bean定义信息)对象
配置文件读取过程
填充属性是set方法 Java不在初始化方法中给属性赋值
IOC bean的生命周期
Aware接口的作用
实现接口之后可以重写set方法,来给属性赋值
setConfigLocations是设置配置文件路径,加载路径两种方式:1.配置文件2.Resource
refresh方法
1.prepareRefresh
①.设置开启时间
②.设置活跃状态(原子状态标志位)为true关闭为FALSE
③.获取Environment对象,并加载当前系统的属性值到Environment对象中
if判断中earlyApplicationListeners是与刷新之前的集合,而applicationListeners是程序运行过程中的集合
prepareRefresh() 中getEnvironment内部有super构造方法进行了一些对象的初始化
④.设置一些监听器和事件的集合对象,默认为空的集合
2.obtainFreshBeanFactory 获得一个刷新的Bean容器
createBeanFactory中设置了许多属性和初始化了许多对象
customizeBeanFactory定制化BeanFactory可以设置属性,包括allowBeanDefinitionOveriding和allowCircularReferences
进入到这个方法每次创建的都是一个新的工厂,每个容器都具有唯一的一个ID标识
loadBeanDefinitions
适配器模式
bean的定义信息刚开始是存在工厂中的,对于当前给定的BeanFactory对象创建出一个新的XmlBeanDefinitionReader对象,XmlBeanDefinitionReader对象完成整体属性资源的加载过程
setEntityResolver用来读取本地的xsd和dtd文件来完成相关的解析工作(读取本地文件库)
如果一些对象需要在控制台显示出来需调用它的toString方法,例如这里的getSchemaMappings
先读取该配置文件,然后就知道了xsd文件映射到本地的哪些目录,后续解析匹配不需要从网络上寻找配置资源
3.prepareBeanFactory
完成Bean工厂的初始化操作,设置属性值
4.PostProcessBeanFacory
方便后续扩展
5. invokeBeanFactoryPostProcessors
实例化并且开始执行BFPP操作
6. registerBeanPostProcessor (6-10实例化之前准备工作)
实例化并且注册所有的 BeanPostProcessor
7.initMessageSource
初始化消息资源 (国际化 语言切换)I18N
8.initApplicationEventMulticaster
初始化广播器(多播器)
9.onRefresh
扩展化实现
10.registerListeners
注册监听器
11.finishBeanFactoryInitialization(beanFactory)
实例化所有的剩下的非懒加载的单例对象
12.finishRefresh
完成整体的刷新
13.resetCommonCaches
重置缓存