spring源码阅读之ioc
1.spring容器的refresh(创建刷新)
1.1 preparerefresh刷新的预处理
1.1.1 initpropertiesSources() 初始化一些属性设置,一般子类自定义个性化的设置
1.1.2 getEnvironment().validateRequiredProperties();校验属性的合法性
1.1.3 this.earlyApplicationListeners = new LinkedHashSet<>(this.applicationListeners);存储预刷新的容器监听器
1.2 obtainFreshBeanFactory(); 获取bean工厂
1.2.1 refreshBeanFactory 刷新(创建)bean工厂
(1)this.beanFactory = new DefaultListableBeanFactory() 创建bean工厂对象
(2)设置id
1.2.2 getBeanFactory() 返回刚才GenericApplicationContext创建的beanfactory对象
1.3 prepareBeanFactory 为1.2获取的bean工厂设置属性
1.3.1 设置beanfactory的类加载器和支持表达式解析器
1.3.2 添加部分BeanPostProcessor【ApplicationContextAwareProcessor】
1.3.3 设置忽略自动装配的接口 【EnvironmentAware 】......
1.3.4 注册可以自动装配的接口 我们可以在任何组件自动注入
BeanFactory,ApplicationContext
1.3.5 设置beanPostProcessor【ApplicationContextAwareProcessor】
1.3.6 添加编译时的AspectJ
1.3.7 给bean工厂注册一些能用的组件
Environment【ConfigurableEnvironment】
SystemProperties【Map<String, Object>】
getSystemEnvironment【Map<String, Object>】
1.4 postProcessBeanFactory(beanFactory) benafactory准备完成后进行的后置处理工作
子类通过重写这个方法来在bean工厂创建并预准备完成后做进一步的设置
=================================以上是beanFactory的创建以及预准备的工作=========================================
1.5 invokeBeanFactoryPostProcessors(beanFactory) 执行BeanFactoryPostProcessor beanfactory的后置处理器,在beanfactory标准初始化之后执行的
两个接口 BeanFactoryPostProcessor BeanDefinitionRegistryPostProcessor
1.5.1 执行invokeBeanFactoryPostProcessors方法
先执行BeanDefinitionRegistryPostProcessor
(1)获取获取所有的BeanDefinitionRegistryPostProcessor
(2)优先级排序(以实现PriorityOrdered,Ordered,没实现排序接口的顺序 执行)
再执行BeanFactoryPostProcessor
流程与上述基本一致
1.6 registerBeanPostProcessors(beanFactory); 注册bean的后置处理器(拦截bean的创建过程)
过程与1.5及其类似
1.7 initMessageSource(); 初始化MessageSource,做国际化,消息绑定和消息解析功能
1.7.1 获取bean工厂
1.7.2 看容器中是否有id为messegeSource的bean(可以按照区域信息获取国际化配置文件中的key值)
无则初始化一个默认的DelegatingMessageSource赋值
1.7.3 注册进容器,以后其他组件可以随时注入使用
1.8 初始化事件派发器
1.8.1 获取bean工厂
1.8.2 从容器中获取是否有id为applicationEventMulticaster的组件(也就是我们自定义的个性化事件组件),如果有则赋值注册
1.8.3 如果没有则初始化一个默认的SimpleApplicationEventMulticaster并注册进容器,以后其他的组件可以随时注入使用
1.9 onRefresh 留给子容器(例如可以多加载一些组件等)
1.10 registerListeners
1.10.1 获取容器中的所有的ApplicationListener
1.10.2 将每个监听器添加到事件派发器中
1.10.3 派发之前步骤所产生的事件
1.11 finishBeanFactoryInitialization 初始化剩下的单实例bean