1.getBean方法
2.调用doGetBean方法
3.transformedBeanName对别名进行解析
4.getSingleton 去一级,二级,三级缓存中去获取对象
5.判断获取的对象是否为空,如不为空,如果是FactoryBean的话,进行处理,不是直接返回
6.获取父工厂,如果父工厂不为空且容器中不包含当前创建的beand定义,走父工厂getbean流程
7.getMergedLocalBeanDefinition(beanName)合并bean定义
8.checkMergedBeanDefinition 校验当前的bean定义,如果是抽象的报异常
9.registerDependentBean 解析依赖的bean,并且注册依赖,
10.根据Bean定义的scope来创建bean
11,getSingleton(beanName, lambad表达式)
12.beforeSingleCreation 标记当前的Bean马上就要创建了,singletonsCurrentlyInCreation 在这里会把beanName加入进来
13.singletonFactory.getObject() 这里进行回调lambda表达式中的createBean方法
14.createBean进行创建bean的流程
15.resolveBeforeInstantiation 这里给后置处理器一个机会返回代理对象,这里会把aop切面的信息解析处理并进行缓存
16.doCreateBean 这里是真正的创建Bean的逻辑
17.creatBeanInstance 推断构造方法,创建实例对象
18.addSingletonFactory 将创建的实例对象放入三级缓存中, 用来解决循环依赖问题
19.populateBean 对于对象中加了Autowired注解的属性进行属性填充
20.initializeBean 进行对象初始化操作
21.回调 Aware接口,如beanNameAware,BeanFactoryAware
22.调用BeanPostProcessor的初始化前的方法
23.进行初始化处理
24.调用BeanPostProcessor的初始化后的方法,这里会进行aop处理
25.afterSingleCreation 把当前的bean给从singletonsCurrentlyInCreation移除掉
26.addSingleton 把创建好的对象放进到缓存池,清空二三级缓存
27.getObjectForBeanInstance 如果是工厂bean 进行处理,不是直接返回
28.spring容器关闭时,调用DisposableBean的destroy方法进行销毁。