spring容器的启动流程

总:

spring启动可以归纳为三步:

1:初始化spring容器,注册后置内置处理器beanPostProcessor的beanDefinition到容器中

2:将配置类的beanDefinition注册到容器中

3:调用refresh()方法刷新容器

因为是基于config技术进行分析源码 那么它的入口是AnnotationConfigApplicationContext,如果是使用xml进行分析的话,那么它的入口是ClassPathXmlApplicationContext,这两个类都是继承啦abstractApplicationContext类,而refresh()方法就是在此类中。

接着分析AnnontationConfigApplicationContext()方法;源码如下:

所以整个spring容器的启动流程可以绘制如下图所示

 

分:

接着我们主要从这三个入口详细分析spring容器启动流程

注:beanDefinition对象在spring中是一个非常重要的概念,它存储啦bean对象的所有的特征信息,如是否单例,是否懒加载,factoryBeanName等

1)初始化流程:
spring容器的初始化时,通过this()调用无参构造函数,主要做啦一下几件事情

实例化BeanFactory(defaultListableBeanFactory)工厂,进行生成bean对象

实例化beanDefinitionReader注解配置读取器,用于对特定注解(@Service,@Repository)的类进行读取转化成BeanDefinition对象。

实例化ClassPathBeanDefinitionScannner路径扫描器,用于对指定的包目录进行扫描查找bean对象。

到此spring容器构造完毕,然后就可以为容器添加一些内置的组件:

添加两个BeanFactory后置处理器,configurationClassPostPrcessor(用来完成bean的扫描与注入工作 @Configuration,@ComponentScan、@ComponentScans,@Import,@Bean),eventListenerMethodProcessor(@EventListener 的方法进行解析,然后转换为一个 ApplicationListener)

添加两个bean后置处理器autowiredAnnotationBeanPostProcessor(用来完成@AutoWired和@Value 自动注入),commonAnnontationBeanPostProcessor(用来完成@PostConstruct@PreDestroy@Resource 、@WebServiceRef等注解注入

添加普通组件 defaultEventListenerFactory

2)注册springconfig配置类到容器中

这个步骤主要是用来解析用户传入的spring配置类,解析成beanDefinition然后注册到容器中  

3)刷新容器:
prepareRefresh()刷新前的预处理:

1 initPropertySources() 初始化一些属性设置,子类自定义个性化的属性设置方法。

2 getEnvironment().validateRequiredProperties():校验属性的合法性

3 earlyApplicationEvents = new LinkedHashSet<ApplicationEvent>() 保存容器中的一些早期的事件

obtainFreshBeanFactory() 获取在容器初始化时创建的beanFactory;

1 refreshBeanFactory() 刷新BeanFactory,设置序列化id

2 getBeanFactory() 返回初始化的genericApplicationContext创建的BeanFactory对象,即DefaultListAbleBeanFactory类型

prepareBeaFactory(beanFactory) BeanFactory的预处理工作,向容器中添加啦一些组件

1设置BeanFactory的类加载器 设置表达式解析器等等

2添加beanPostProcessor(applicationContextAwareProcessor)

3设置忽略自动装配的接口:EnvironmentAware,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值