梳理下spring创建和初始化的整个过程:
第一步:
AnnotationConfigApplicationContext annotationConfigApplicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
第二步:
public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
this();
register(annotatedClasses);
refresh();
}
第三步:
@Override
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// 第一步:刷新的预处理工作
prepareRefresh();
// 第二步:获取BeanFactory
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// 第三步:BeanFactory的预处理设置 一些后置处理器什么的
prepareBeanFactory(beanFactory);
try {
// 第四步:后置处理工作 子类重写这个方法进行设置 我们可以自己实现自己的后置处理器
postProcessBeanFactory(beanFactory);
// 第五步:激活后置处理器
invokeBeanFactoryPostProcessors(beanFactory);
// 第六步:注册 拦截Bean创建的 Bean处理器,这里只是注册,真正的调用是在getBean时候
registerBeanPostProcessors(beanFactory);
// 第七步:为上下文初始化Message消息资源,即不同语言的消息体,国际化处理
initMessageSource();
// 第八步:初始化应用消息广播器,并放入"applicationEventMulticaster"bean中,与Spring的事件监听有关
initApplicationEventMulticaster();
// 第九步:留给子容器,初始化剩下的bean,默认是空的
onRefresh();
// 第十步:初始化所有的单实例bean
registerListeners();
//
finishBeanFactoryInitialization(beanFactory);
//
finishRefresh();
}
catch (BeansException ex) {
if (logger.isWarnEnabled()) {
logger.warn("Exception encountered during context initialization - " +
"cancelling refresh attempt: " + ex);
}
//
destroyBeans();
//
cancelRefresh(ex);
// Propagate exception to caller.
throw ex;
}
finally {
// Reset common introspection caches in Spring's core, since we
// might not ever need metadata for singleton beans anymore...
resetCommonCaches();
}
}
}
-----------------------------44-----------------------------
这一步:
//
invokeBeanFactoryPostProcessors(beanFactory);
进入这个方法:invokeBeanFactoryPostProcessors
在容器中找到所有的后置处理器,遍历。
执行后置处理器的方法。有优先级的排序执行。
-----------------------------45-----------------------------
第六步:后置处理器都是有优先级的。
前六步只是在BeanFactory保存了后置处理器。
-----------------------------46-----------------------------
第七步:
-----------------------------47-----------------------------
第八步:
第九步:
第10步:
初始化所有的单实例bean。
-----------------------------48-----------------------------
我们主要看下这个步骤。
。。。。。。
-----------------------------49-----------------------------
-----------------------------50-----------------------------
-----------------------------51-----------------------------