Please enable JavaScript.
Coggle requires JavaScript to display documents.
Refresh - Coggle Diagram
Refresh
- 从spring容器中获取BeanFactory 并设置class loader 、表达式解析器、属性编辑器、
- 添加ApplicationContextAwareProcessor注入5个Aware接口
- 注入其他信息如Environement、systemProperties
- 不同的Spring容器做不同的操作。
- 比如GenericWebApplicationContext容器会在BeanFactory中添加ServletContextAwareProcessor
- invokeBeanFactoryPostProcessors :star:
- 找出实现了BeanFactoryPostProcessor接口的方法执行
- BeanFactoryPostProcessor 使用ConfigurableListableBeanFactory 对Bean进行处理
- BeanDefinitionRegistryPostProcessor 继承 BeanFactoryPostProcessor 使用BeanDefenitionRegistry 对Bean处理
- 实例化Web容器AnnotationConfigServletWebServerApplicationContext时会初始化属性AnnotatedBeanDefinitionReader
- AnnotatedBeanDefinitionReader 初始化时候会向容器中添加包括BeanPostProcessor和BeanFactoryPostProcessor
- 比如ConfigurationClassPostProcessor 和AutowiredAnnotationBeanPostProcessor
- AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
- 找出实现BeanDefinitionRegistryPostProcessor的bean 即AnnotatedBeanDefinitionReader 初始化时添加的Bean,然后按优先级执行
- 找到实现BeanFactoryPostProcessor的bean,按优先级执行
- ConfigurationClassPostProcessor 是优先级最高的Processor
该接口处理流程
- 从Bean中找出带 Configuration 注解的Bean,使用ConfigurationClassParse去解析
- ConfigurationClassParse 内部有一个Map configurationClasses保存解析的类
- configurationClasses 存储配置类信息,被 Bean 和 ImportSelector 和ImportBeanDefinitionRegistrar 修饰的方法和类
-
- registerBeanPostProcessors
-
- initMessageSource
- initApplicationEventMulticaster
- onRefresh
- registerListeners
- 初始化国际化信息
- 在Spring容器中初始化事件广播器,事件广播器用于事件的发布。
- 模板方法,创建Web容器,比如tomcat,jetty,Undertow
- 注册监听器
- finishBeanFactoryInitialization
-
- 初始化生命周期处理器,并设置到Spring容器中(LifecycleProcessor)
- 调用生命周期处理器的onRefresh方法,这个方法会找出Spring容器中实现了SmartLifecycle接口的类并进行start方法的调用
- 发布ContextRefreshedEvent事件告知对应的ApplicationListener进行响应的操作
- 发布EmbeddedServletContainerInitializedEvent事件告知对应的ApplicationListener进行响应的操作
- 设置容器启动时间
- 撤销关闭状态,开启活跃状态
- 初始化属性源,验证属性信息