ApplicationContext refresh流程

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

总结

  1. prepareRefresh- 做准备工作

  2. obtainFreshBeanFactory 创建获取BeanFactory

  3. prepareBeanFactory 准备 BeanFactory

  4. PostProcessBeanFactory 子类扩展BeanFacrtoy

  5. invokeBeanFactoryPostProcessors 后处理扩展BeanFacrtory

  6. registerBeanPostProcessors 准备Bean 后处理

  7. initMessafeSource 为AppilcationContext 提供共国际化功能

  8. initApplicationEcentMulticaster 为ApplicationContext 提供事件发布器

  9. onRefresh 留给子类扩展

  10. registerListeners 为ApplicationContext 准备监听器

  11. finishBeanFactorylnitalization 初始化Bean 执行Bean 后处理器

  12. finishRefresh 准备生命周期管理器,发布ContextRefreshed事件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值