spring如何解决循环依赖
2023-02-28 17:38:05 0 举报
spring如何解决循环依赖
作者其他创作
大纲/内容
populateBean
加锁
创建动态代理对象的方法
init-method
拿到创建动态代理对象的方法并创建代理对象并放入二级缓存
bean的使用
三级缓存
beanDefinition(Map)
postProcesser增强器
实例化
bean的生命周期
bean
先去容器中拿
getBean()
beanPostostProcesser
双重检查锁
不完整bean
初始化
beafore
b
bean的类型
读三级缓存
beanFactory(简单工厂)
动态代理(jdk、cglib)
spring容器,一级缓存
bean的创建过程
<bean id=\"user\
用户自己创建的bean
结论1、一级缓存可以解决循环实例化导致的栈溢出问题,但是,在解决可能获取到不完整bean的问题时会带来严重的性能问题2、二级缓存可以解决性能问题,但是当循环依赖遇上aop引入的情况后,会不可避免的多次创建代理对象(多次循环依赖)3、三级缓存完美解决了循环依赖问题,并通过在三级缓存中存创建代理对象的方法使代码的职责分清
doCreateBean()
给属性赋值,并且做一系列的初始化操作
spring内部声明的三级缓存
有
读二级缓存
清三级缓存
spring自己加载过程中生成的bean
B
A
doGetBean()
bean的销毁
反射
二级缓存
beanPostProsasser
开辟内存空间,创建原始对象, 属性为默认值
baenFactoryPostProcesser
读一级缓存
A a =new A();B b =new B();a.setB(b);b.setA(a);
a
把创建代理对象的方法存入缓存中
after
json、yml
注解方式配置,@Bean,@Service、@Component
属性赋值
aware接口方法
什么是循环依赖
加入spring容器中
beanDefinitionReader
配置bean
xml方式配置
直接返回
没有
c
createBean()
多次循环依赖A情况:
清除二级缓存
收藏
0 条评论
下一页