1.循环依赖
2.生命周期
getbean ("");开始看
abstractbeanapplicationcontext.getbean()
1、 abstractbeanfacoty.dogetbean()
singletonobjects 单列缓存 earlysingletonobejcts singlefactois 多级缓存 (解决 循环依赖)
2.1ransforbeanname 解析别名
2.2 getsington 首先尝试去我们的 缓冲池获取bean 由于第一次获取不到
2.3 isPrototypeCurrentlyInCreation 如果循环依赖出现不是单例的 就抛出异常
2.4 getParentBeanFactory 如果有父工厂 就由父工厂进行加载
2.5 getMergedLocalBeanDefinition 合并 bean定义
2.6检查 当前bean 是不是抽象的
2.7 getDependsOn
2.8
this.getSingleton(beanName, new ObjectFactory<Object>() {
public Object getObject() throws BeansException {
try {
return AbstractBeanFactory.this.createBean(beanName, mbd, args);
} catch (BeansException var2) {
AbstractBeanFactory.this.destroySingleton(beanName);
throw var2;
}
}
});
2.8.1 this.beforeSingletonCreation(beanName);要创建 bean bean 了
3. createBean
resolveBeforeInstantiation aop 找切面
4 doCreateBean
4.1 createBeanInstance 创建出来的bean 属性还没有被复制 早期对象
创建ioc 容器的核心方法 :refesh(); -->
finishBeanFactoryInitialization->
preInstantiateSingletons
------------------------------------------------------------------------------------------------------------
1、sacn
2、parse
3 info cashe (deandefinition map) ---放在deafultlistenabebeanfactory 的map 中
beandefinition 放置 bean定义
beanfactoryprocess--- postprocessbeanfaction()