孙哥Spring源码第11集

第11集 解决代理类的循环依赖

【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】
在这里插入图片描述

1、代理类A和代理类B如何解决循环依赖?

  • getBean(“A”)
  • createInstance(“A”)
  • 放入到singletonFactorys【A[半成品]】
  • A类的填充属性->填充B属性,
  • getBean(“B”)
  • createInstance(“B”)
  • 放入到singletonFactorys【A[半成品],B[半成品]】
  • B类的填充属性->填充A属性
  • getBean(“A”)->从singletonFactorys中取出A半成品,A从singletonFactorys移动到了earlySginletonObjects
  • 注意singletonFactorys存的value是方法,为了去处理代理类 而在执行getEarlyBeanReference执行beanPostProcessor加工,从A变成了Proxy A,并且加入代理池中。
    • 代理缓存池【Proxy A】
  • B进行初始化 容器注入 BeanPostProcessorBefore InitializingBean和invokeMethod BeanPostProcessorAfter proxyB创建完成,加入代理对象缓存池。【Proxy A,ProxyB】
  • 接着B执行 addSingleton将earlySginletonObjects的B移入到singletonObjects。
  • A属性填充完毕后接着继续给A进行初始化 执行 addSingleton将earlySginletonObjects的B移入到singletonObjects。

2、使用DefaultListableBeanFactory的两个子类

DefaultListableBeanFactory XmlClassPathBeanFactory

3、创建代理环境

image-20230509161549352 image-20230509161559074 image-20230509161613245 image-20230509161536689 image-20230509161625973

4、为什么Debug中找不到Proxy A的B属性

Proxy是为原始对象增强额外功能,应该看代理对象A的原始对象A的B属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值