1、AbstractApplicationContext.refresh()
2、AbstractApplicationContext.finishBeanFactoryInitialization(beanFactory)
3、DefaultListableBeanFactory.preInstantiateSingletons();
4、AbstractBeanFactory.doGetBean()
1、AbstractBeanFactory.getSingleton(beanName);第一次为null
2、AbstractBeanFactory.getSingleton(beanName,new ObjectFactory<Object>(){
public void getObject(){
//下面5调用
createBean(beanName, mbd, args);
}
});
5、DefaultSingletonBeanRegistry.getSingleton(beanName,ObjectFactory<?> singletonFactory)
// 开始创建前放入singletonsCurrentlyInCreation中
1、beforeSingletonCreation(beanName);
// 调用DefaultSingletonBeanRegistry.getSingleton
// 执行下面的1、2、3、4
2、singletonObject = singletonFactory.getObject();
// 创建结束后从singletonsCurrentlyInCreation中移除
3、afterSingletonCreation(beanName);
4、addSingleton(beanName, singletonObject);
6、AbstractAutowireCapableBeanFactory.doCreateBean{
1、instanceWrapper = createBeanInstance(beanName, mbd, args);
// 一个类首先被加入第三级缓存
2、addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean));
// 填充Bean
3、populateBean(beanName, mbd, instanceWrapper);
// 调用Bean实现的各种Aware接口方法
4、exposedObject = initializeBean(beanName, exposedObject, mbd);
}