ApplicationContext refresh流程
2-6准备容器
1.prepareRefresh
-
prepare 准备
-
refresh 刷新
创建了 Environment 环境对象
Environment 作用之一是 为后续@Value 值注入时提供键值
2.obtainFreshBeanFactory
-
obtain 获得
-
fresh 新的
创建或获取 benaFactory 提供bean的创建,依赖注入,初始化
BeanDefinition 作为bean的设计蓝图,规定了bean的特质,如单列多列,依赖关系,初始销毁方法
3.prepareBeanFactory
-
prepare 准备
完善BeanFactory
StandardBeanExpressionResolver 来解析SpEL
ResourceEditorRegistrar 注释类型转换器,并应用ApplicationContext 提供的Environment完成${}解析
特殊bean 列如 beanFatory 以及ApplicationContext,通过refisterResolvableDependency来注册他们
ApplicationContextAwareProcessor 解析Aware接口 来做功能增强
4.postProcessBeanFactory
-
post 布置
-
process 过程
这是空的实现,留给子类扩展
采用模板方法的设计模式
5.invokeBeanFactoryPostProcessprs
-
invoke 调用
-
Processprs 处理器
后处理器的方式扩展bean 功能
后处理器 充当beanFactory 的扩展点,用来补充或修改 BeanDefinition
ConfigurationClassPostProcessor 解析 @Configuration @Bean @import @PropertySource 等
6.registerBeanPostProcessors
-
register 登记
Bean的后处理器
bean后处理器,充当bean的扩展点,可以工作bean的实例化,依赖注入,初始化阶段
例如: AutowiredAnnotationBeanPostProcessor 功能,解析@Autowired @Value 注解
ConmmonAnnotaitionBeanPostProcessor 功能 解析 @Resource @PostConstruct @PreDestroy
AnnotationAwareAspectjAutoProxyCreator 功能 为符合切点目标Bean自动创建代理
这些bean只是注册了,还没有生效,只有在bean创建的时候才会真真使用到
7.initMessageSource
-
init初始化
-
Message 消息
-
Source 来源
-
实现国际化
8.initApplicationEventMulticaster
-
event 事件
-
multicaster 广播器
初始化应用时间广播器
收发事件给监听器
9.onRefresh
空实现,留给子类扩展
10.registerListeners
-
register 注册
-
Listenets 监听器
注册监听器事件
用来接收事件
一部分监听器是 事先编程添加,另一部分监听器来自容器中的bean ,还有一部分来自于 @EventListener 的解析
11.finishBeanFactorylnitalization
-
finish完成
-
lnitalization 初始化赋值
单例池 singletonObjects
conversionService 也是一套转换机制,作为对PropertEditor 的补充
内嵌值解析器用来解析@Value 中${} 借用的是Environment 的功能
单例池用来缓存所有单例对象,对象的创建都有三个阶段,每一个阶段都有不同的bean后处理器参与进来,扩展功能
12.finishRefresh
-
finish 完成
创建lifecycleProcessor 是bean的生命周期处理器
发布ContextRefreshed 事件
用来控制容器内需要生命周期管理的Bean
如果容器中有名称为lifecycleProcessor 的bean 就用它,否则创建默认的生命周期管理器
调用context 的 start 即看触发所有的实现LifeCycle 接口 bean的start
调用context的 stop 即可触发所有实现 LifeCycle 接口bean 的stop
总结
-
prepareRefresh- 做准备工作
-
obtainFreshBeanFactory 创建获取BeanFactory
-
prepareBeanFactory 准备 BeanFactory
-
PostProcessBeanFactory 子类扩展BeanFacrtoy
-
invokeBeanFactoryPostProcessors 后处理扩展BeanFacrtory
-
registerBeanPostProcessors 准备Bean 后处理
-
initMessafeSource 为AppilcationContext 提供共国际化功能
-
initApplicationEcentMulticaster 为ApplicationContext 提供事件发布器
-
onRefresh 留给子类扩展
-
registerListeners 为ApplicationContext 准备监听器
-
finishBeanFactorylnitalization 初始化Bean 执行Bean 后处理器
-
finishRefresh 准备生命周期管理器,发布ContextRefreshed事件