ProcessOn参考:
ApplicationContext容器初始化过程:
创建ApplicationContext的构造器内:
super(parent):创建ResourcePatternResolver;如果有父容器的话,setParent
setConfigLocations(configLocations):指定spring的配置文件;创建Environment对象
refresh():刷新容器
refresh()方法内的13个方法
-
prepareRefresh():容器刷新前的准备工作
initPropertySources():钩子方法
getEnvironment().validateRequiredProperties():若制定了必须的环境变量proprties,则environment对象会去验证
准备监听器和事件的集合,默认为空
-
obtainFreshBeanFactory():
创建容器对象及BeanDefinition对象
创建beanFactory对象(DefaultListableBeanFactory)
customizeBeanFactory(beanFactory)
-
读取、解析并注册BeanDefinition对象。(关键方法:doLoadBeanDefinitions() )
DefaultBeanDefinitionDocumentReader
当开启<context: compent-scan>标签后,会获取ComponentScanBeanDefinitionParser对象来parse 此标签元素,使用ClassPathBeanDefinitionScanner实现扫描class文件获取BeanDefinition集合。parse()方法内会调用AnnotationConfigUtils.registerAnnotationConfigProcessors()加载5个internal类
当开启<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
-
invokeBeanDefinitionRegistryPostProcessors:处理实现了BeanDefinitionRegistryPostProcessor接口的processor。
具体执行方法:循环执行registryProcessor.postProcessBeanDefinitionRegistry(registry)
ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(registry)内部会处理Configuration配置类。
ConfigurationClassParser负责解析配置类,会解析@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()
- finishRefresh(): 完成refresh的操作。
* clearResourceCaches:清除缓存
* initLifecycleProcessor:创建生命周期处理器
* 发布ContextRefreshedEvent事件
- resetCommonCaches():清除cache操作