<b>prepareRefresh</b>
<b>initPropertySources</b> 可以初始化一些kv属性到<b>context</b>环境中
<b>getEnvironment().validateRequiredProperties(); </b>校验该环境是否缺少必要的属性
<b>obtainFreshBeanFactory</b> 主要就是为了获取到<b>BeanFactory </b>不同的<b>Context</b>也在这边做是否可以重复<b>Refresh</b>的操作
<b>prepareBeanFactory </b>预先配置Bean工厂
代码就不复制了,自己对着看。简单来说就是在这边去配置了<b>SPEL</b>的解析器; 类转化器(比如使用 <span class="tag">@value</span> 一段string转化成某个Bean,默认的很鸡肋,需要程序员自己实现转化器 ); <b>ApplicationContextAwareProcessor</b> 实现bean回调的后置处理器;一堆自动装配时,忽略给定的依赖接口的aware;将<b>BeanFactory</b>,<b>ResourceLoader</b>,ResourceLoader,<b>ApplicationContext</b>注册;注册<b>ApplicationListenerDetector</b>后置处理器;将<b>Environment</b>也注册到ioc;
<b>postProcessBeanFactory</b> 加载所有bean定义,但还没有实例化bean。这允许在特定的ApplicationContext实现中注册特殊的BeanPostProcessors等。一般都是注册些web相关的
<b>invokeBeanFactoryPostProcessors </b>
执行BeanFactory的后置处理器,这个相当重要,独立拉出来,里面太繁琐了,主要就是执行之前的<b>ConfigurationClassPostProcessor</b> 扫描注册到<b> BeanDefinitionMap</b>
<b>registerBeanPostProcessors</b> 将扫描到的Bean后置处理器排排序,加入到集合中后序在bean 的生命周期中调用
<b>initMessageSource </b>国际化
<b>initApplicationEventMulticaster</b>
this.applicationEventMulticaster = new <b>SimpleApplicationEventMulticaster</b>(beanFactory);生成默认的事件多播器,支持异步
<b>onRefresh</b> 没啥用
<b>registerListeners </b>主要是用于注册使用接口定义的监听器,而使用注解的监听器是在所有bean实例化初始化后注册的,解答上
<b>finishBeanFactoryInitialization </b><b></b>
非懒加载的bean都会在这边完成实例化,属性赋值,和初始化 很复杂,详情见<b>《bean生命周期流程图》</b>
<b>finishRefresh </b>
1.在所有<b>bean都完成实例初始化后</b>,会扫描所有实现了<b>SmartLifecycle</b>接口的类,调用start方法
2.publishEvent(new <b>ContextRefreshedEvent</b>(this)); 发布event
spring中的扩展点很多,像BeanFactory后置处理器,bean后置处理器,event,SmartLifecycle等等。都作为很多框架或者是中间件的扩展点。之后梳理一份。