一起来读Spring源码吧(三)ApplicationContext初始化过程

上篇讲到BeanFactory的初始化过程,Spring还提供了另外一种拥有更多扩展功能的容器ApplicationContext。
ApplicationContext比简单BeanFactory多出的功能:
1、支持不同的信息源。通过继承MessageSource接口
2、访问资源。通过继承ResourceLoader,可以从不同地方得到Bean定义资源
3、应用事件。通过继承ApplicationEventPublisher,引入事件机制,方便管理Bean的生命周期
。。

我们以ClassPathXmlApplicationContext为例分析这类容器的初始化过程。
第一步是设置配置文件路径,保存在configLocations属性中。
重点是后面的refresh(),其中逻辑清晰地展示了所有的流程:
1、准备工作
对系统属性和环境属性进行准备和验证
2、初始化BeanFactory,解析容器中的bean
3、对BeanFactory进行各种功能填充
3.1、增加对SPEl语言的支持;
3.2、增加对属性编辑器的支持,如字符串转Date;
3.3、添加ApplicationContextAwareProcessor
为了在实现了EnvironmentAware等接口的bean实例化时取得相应的资源
3.4、设置忽略依赖
将ApplicationContextAwareProcessor涉及到的Aware类在依赖注入的时候忽略
3.5、注册固定依赖
为bean中BeanFactory等属性的注入注册固定的实例
3.6、增加对AspectJ的支持(后续会细说)
3.7、将相关环境变量及属性以单例模式注册
4、允许子类添加自己的BeanPostProcessors
5、激活BeanFactoryPostProcessor
在容器所有bead实例化前对bean配置的元数据进行处理,如PropertyPlaceholderConfigurer实现bean定义中${key}和配置文件的映射
6、注册BeanPostProcessor
7、初始化消息资源,国际化处理
8、初始化应用事件广播器
用于在context.publishEvent时根据事件类型遍历对应的监听器
9、允许子类初始化其他的bean
10、查找并注册事件监听器
11、初始化非延迟加载的单例
12、通知生命周期处理器容器启动完毕,发出ContextRefreshedEvent事件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值