ApplicationContext refresh的流程
12个步骤:
1.prepareRefresh
1.这一步创建和准备了Environment对象
初始化键值信息。
作用之一是为后续@Value,值注入提供。
2.obtainFreshBeanFactory
1.BeanFactory的作用是负责bean的创建、依赖注入和初始化。
2.BeanDefinition作为bean的设计蓝图,规定了bean的特征。
BeanDefinition中的bean信息可以从xml、配置类或扫描获取。
3.prepareBeanFactory
1.StandardBeanExpressionResolver来解析SpEL
2.ResourceEditorRegistrar会注释类型转换器,并应用ApplicationContext 提供的Environment完成${}解析
3.特殊bean指beanFactory 以及ApplicationContext,通过registerResolvableDependency来注册它们
4.postProcessBeanFactory
一般Web环境的ApplicationContext都要利用它注册新的Scope,完善Web 下的BeanFactory。体现的是模板方法设计模式
5.invokeBeanFactoryPostProcessors
1.beanFactory后处理器,充当beanFactory 的扩展点,可以用来补充或修改BeanDefinition
2.ConfigurationClassPostProcessor-解析@Configuration、@Bean、@lmport、@PropertySource等
6.registerBeanPostProcessors
1.bean后处理器,充当bean的扩展点,可以工作在 bean 的实例化、依赖注入、初始化阶段
2.AutowiredAnnotationBeanPostProcessor功能有:解析@Autowired,@value注解
3.CommonAnnotationBeanPostProcessor功能有∶解析@Resource,@PostConstruct,@preDestroy
4.AnnotationAwareAspectJAutoProxyCreator功能有:为符合切点的目标bean自动创建代理
7.initMessageSource
实现国际化
8. initApplicationEventMulticaster
用来发布事件给监听器
9.onRefresh
空实现,SpringBoot中的子类可以在这里准备WebServer,即内嵌 web容器
10.registerListeners
用来接收事件
11.finishBeanFactorylnitialization
1.conversionService也是一套转换机制,作为对 PropertyEditor的补充
2.内嵌值解析器用来解析@Value 中的${},借用的是Environment的功能
3.单例池用来缓存所有单例对象,对象的创建都分三个阶段,每一阶段都有不同的bean后处理器参与进来,扩展功能
12.finishRefresh
用来控制容器内需要生命周期管理的bean
