beanFactory.getBean-AbstractBeanFactory.getBean-doGetBean-getSingleton(獲取循環(huán)依賴(lài))
public void refresh() throws BeansException, IllegalStateException {
synchronized(this.startupShutdownMonitor) {
this.prepareRefresh();
ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();
this.prepareBeanFactory(beanFactory);
try {
this.postProcessBeanFactory(beanFactory);
this.invokeBeanFactoryPostProcessors(beanFactory);
this.registerBeanPostProcessors(beanFactory);
this.initMessageSource();
this.initApplicationEventMulticaster();
this.onRefresh();
this.registerListeners();
this.finishBeanFactoryInitialization(beanFactory);
this.finishRefresh();
} catch (BeansException var9) {
if (this.logger.isWarnEnabled()) {
this.logger.warn("Exception encountered during context initialization - cancelling refresh attempt: " + var9);
}
this.destroyBeans();
this.cancelRefresh(var9);
throw var9;
} finally {
this.resetCommonCaches();
}
}
}
1蛋逾、實(shí)例化spring容器
2、掃描springbean規(guī)則的class
3遇汞、遍歷這個(gè)集合中的類(lèi)---封裝成為一個(gè)bd對(duì)象---put beanDefinitionMap中
4溶耘、遍歷beanDefinitionMap ---獲得bd對(duì)象
5琅捏、解析---validate
6喉酌、通過(guò)---bd---class---類(lèi)對(duì)象
7、得到所有構(gòu)造方法---通過(guò)算法推斷出合理的構(gòu)造方法
8赐俗、通過(guò)這個(gè)合理的構(gòu)造方法反射實(shí)例化一個(gè)對(duì)象
9、合并bd
10 弊知、提前暴露工廠---循環(huán)依賴(lài)
11阻逮、注入屬性---判斷是否需要完成屬性填充,自動(dòng)注入
12秩彤、執(zhí)行部分的aware接口
13 叔扼、執(zhí)行部分aware接口,lifecycle,callback
14漫雷、lifeCycle,callback
15 aop 事件