You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## Spring启动流程
### prepareRefresh()
记录时间、active标记、获取environment(系统环境变量和System.setProperty()设置的)、初始化监听器和事件集合。
### obtainFreshBeanFactory()
关闭以前的BeanFactory创建一个新的BeanFactory供上下文生命周期的各阶段使用。
父beanDefinition、bean可覆盖、循环引用
loadBeanDefinitions()通过inputStream读取并解析xml文档拿到beanDefinition。
### prepareBeanFactory()
准备BeanFactory设置ClassLoader、SPEL解析器、propertyEditor、BeanPostProcessor(ApplicationContextAwareProcessor)、ignoreDependencyInterface(各种Aware接口)、registerResolvableDependency、BeanPostProcessor(ApplicationListenerDetector、environment单例。
### postProcessBeanFactory(beanFactory)
继承ClassPathXmlApplicationContext的子类可以修改beanFactory用于实现一些自定义的功能。
### invokeBeanFactoryPostProcessors(beanFactory)
BeanDefinitionRegistryPostProcessors和BeanFactoryPostProcessors按照实现PriorityOrdered、Ordered接口、没有实现这两个接口的PostProcessors处理执行顺序@Order注解在这里是不考虑的。
// Register bean processors that intercept bean creation.
### registerBeanPostProcessors(beanFactory)
BeanPostProcessor按照实现PriorityOrdered、Ordered接口、没有实现这两个接口的PostProcessors处理执行顺序@Order注解在这里是不考虑的。
BeanPostProcessorChecker用来记录日志。
### initMessageSource()
初始化MessageSource<font color=red>MessageSource是格式化字符串的?</font>
### initApplicationEventMulticaster()
初始化应用事件监听器SimpleApplicationEventMulticaster通过线程池往各种监听器添加事件。
### onRefresh()
由子类实现比如Spring Boot创建web server。
### registerListeners()
注册所有实现了ApplicationListener接口的监听器并发布早起应用事件。
### finishBeanFactoryInitialization(beanFactory)
实例化所有非懒加载的单例。
ConversionService(转换系统的一个入口,<font color=red>可用于常见的日期格式转换?</font>)、添加EmbeddedValueResolver、BeanFactory方式获取LoadTimeWeaverAware、置空temporary ClassLoader、冻结配置、预实例化单例。
preInstantiateSingletons()
遍历beanNames触发所有非懒加载bean实例化。
遍历beanNames触发所有适用 bean 的初始化后回调。
getBean(beanName) -> doGetBean -> getSingleton(三级缓存) -> createBean -> doCreateBean -> 代理和反射创建bean(三级缓存) -> populateBean -> initializeBean
### finishRefresh()
清理资源缓存、初始化LifecycleProcessor、发布最终事件
### resetCommonCaches()
### contextRefresh.end()