Spring Bean生命周期
2021-03-02 本文已影响0人
一只弹窗仔
beanFactory.getBean-AbstractBeanFactory.getBean-doGetBean-getSingleton(获取循环依赖)
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、实例化spring容器
2、扫描springbean规则的class
3、遍历这个集合中的类---封装成为一个bd对象---put beanDefinitionMap中
4、遍历beanDefinitionMap ---获得bd对象
5、解析---validate
6、通过---bd---class---类对象
7、得到所有构造方法---通过算法推断出合理的构造方法
8、通过这个合理的构造方法反射实例化一个对象
9、合并bd
10 、提前暴露工厂---循环依赖
11、注入属性---判断是否需要完成属性填充,自动注入
12、执行部分的aware接口
13 、执行部分aware接口,lifecycle,callback
14、lifeCycle,callback
15 aop 事件