ProcessOn参考:
ApplicationContext容器初始化过程:
创建ApplicationContext的构造器内:
- super(parent):创建ResourcePatternResolver;如果有父容器的话,setParent
- setConfigLocations(configLocations):指定spring的配置文件;创建Environment对象
- refresh():刷新容器
refresh()方法内的13个方法
-
prepareRefresh():容器刷新前的准备工作
- initPropertySources():钩子方法
- getEnvironment().validateRequiredProperties():若制定了必须的环境变量proprties,则environment对象会去验证
- 准备监听器和事件的集合,默认为空
-
obtainFreshBeanFactory():
创建容器对象及BeanDefinition对象**(Xml配置的BeanDefinition对象)**
-
创建beanFactory对象(DefaultListableBeanFactory)
-
customizeBeanFactory(beanFactory)
-
读取、解析并注册BeanDefinition对象。(关键方法:doLoadBeanDefinitions() )
-
DefaultBeanDefinitionDocumentReader
-
当开启<context: compent-scan>标签后,会获取ComponentScanBeanDefinitionParser对象来parse 此标签元素,使用ClassPathBeanDefinitionScanner实现扫描class文件获取BeanDefinition集合。parse()方法内会调用AnnotationConfigUtils.registerAnnotationConfigProcessors()加载5个internal类
spring6.0 是加载 4个internal类:
”internalConfigurationAnnotationProcessor“、
”internalAutowiredAnnotationProcessor“、
”internalEventListenerProcessor“、
”internalEventListenerFactory“
-
当开启<aop:aspectj-autoproxy/>标签后,会获取AspectJAutoProxyBeanDefinitionParser对象来parse 此标签元素,parse()方法内会调用AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary()加载AnnotationAwareAspectJAutoProxyCreator类;
-
-
-
prepareBeanFactory(beanFactory):为beanFactory set一些属性值
-
set BeanExpressionResolver:Spel表达式解析器
-
add PropertyEditorRegistrar:value的值编辑器
-
add ApplicationContextAwareProcessor对象
-
ignoreDependencyInterface 各种Aware的class,作用是在autowired进行注入时会忽略这些接口。
-
registerResolvableDependency:
-
add ApplicationListenerDetector对象
-
-
postProcessBeanFactory(beanFactory):钩子方法
-
invokeBeanFactoryPostProcessors(beanFactory):
实例化并调用所有BeanFactoryPostProcessors
ConfigurationClassPostProcessor会解析注解(注解配置的BeanDefinition对象)
-
invokeBeanDefinitionRegistryPostProcessors:处理实现了BeanDefinitionRegistryPostProcessor接口的processor。
具体执行方法:循环执行registryProcessor.postProcessBeanDefinitionRegistry(registry)
-
ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(registry)内部会处理Configuration配置类。
-
ConfigurationClassParser负责解析配置类,会解析@Component、
@PropertySource、@ComponentScan、@Import、@ImportSource、@Bean 等注解
-
-
invokeBeanFactoryPostProcessors:处理所有的processor。
具体执行方法:循环执行postProcessor.postProcessBeanDefinitionRegistry(registry)
-
ConfigurationClassPostProcessor.postProcessBeanFactory(registry)方法内部执行:
enhanceConfigurationClasses():对配置类动态代理
add ImportAwareBeanPostProcessor 对象
-
-
-
registerBeanPostProcessors(beanFactory):实例化并注册所有BeanPostProcessors:
- addBeanPostProcessor postProcessor集合,实现ordered接口的需要先排序。
-
initMessageSource():国际化
-
initApplicationEventMulticaster():初始化事件广播器
默认创建SimpleApplicationEventMulticaster对象
-
onRefresh():钩子方法
-
registerListeners():注册监听器
getApplicationEventMulticaster().addApplicationListener()
getApplicationEventMulticaster().addApplicationListenerBean()
-
finishBeanFactoryInitialization(beanFactory):实例化非懒加载的所有Bean
-
1setConversionService:设置转换器
-
addEmbeddedValueResolver:添加值解析器
-
freezeConfiguration:设置冻结标记
-
实例化bean:
- 实例化bean
- applyMergedBeanDefinitionPostProcessors()
- populateBean():填充自动注入的属性值
- initializeBean():初始化bean
-
invokeAwareMethods:只处理实现了BeanNameAware、BeanFactoryAware、BeanClassLoaderAware 接口的类
-
applyBeanPostProcessorsBeforeInitialization():
-
invokeInitMethods:调用一些生命周期方法:afterPropertiesSet()、invokeCustomInitMethod()
-
和bean的代理对象相关的
InstantiationAwareBeanPostProcessor
-
-
finishRefresh(): 完成refresh的操作。
- clearResourceCaches:清除缓存
- initLifecycleProcessor:创建生命周期处理器
- 发布ContextRefreshedEvent事件
-
resetCommonCaches():清除cache操作