GetBean流程概览
2022-10-15 21:53:07 0 举报
GetBean流程概览
作者其他创作
大纲/内容
调用前置处理器
instantiateBean
1. getBean(String name)
实例化Bean对象
给对象进行赋值
3.3afterSingletonCreation
移除bean创建标识this.singletonsCurrentlyInCreation.remove(beanName)
实现了InitializingBean接口在此处回调afterPropertiesSet方法
3.2.2.4.4applyBeanPostProcessorsAfterInitialization
回调applicationContext
3.2.2.4.1invokeAwareMethods
3.2.2.4initializeBean
初始化对象
3.2.2.1createBeanInstance
autowireConstructor
3. getSingleton
2.1getObjectForBeanInstance
3.2 AbstractAutowireCapableBeanFactory#createBean
instantiateUsingFactoryMethod
3.2.2.4.2invokeInitMethods
处理方法上有@Autowire注解的
把早期对象放入缓存中,用于解决循环依赖(什么叫做早期对象(还没有属性进行赋值))
处理无参构造器注入的
3.2.1resolveBeforeInstantiation
循环依赖 A-B
3.2.2doCreateBean
2. doGetBean
处理@Bean注入的
3.4addSingleton
调用后置处理器(aop 在此处判断bean是否可以被代理)
第一层缓存:最基础的缓存,创建完并初始化(createBean)后的bean实例会放入,项目启动完成后获取bean实例时从此获取第三层缓存:创建bean过程中用于处理循环依赖的临时缓存,由于只有在初始化时才知道有没有循环依赖,所以通过ObjectFactory临时“存储”刚创建完的bean,并延迟触发循环依赖时被引用的bean需要赋值当前bean时去获取当前bean的逻辑,且获取对象会作为当前bean的最终对象第二级缓存:创建bean过程中用于处理循环依赖的临时缓存,搭配第三层缓存,用于其ObjectFactory返回对象的缓存,保证多个关联对象对当前bean的引用为同一个
3.1 beforeSingletonCreation
将当前bean标识为正在创建this.singletonsCurrentlyInCreation.add(beanName)
3.2.2.4.3applyBeanPostProcessorsBeforeInitialization
0 条评论
回复 删除
下一页