【spring源码】spring的循环依赖

时间:2021-05-24 03:19:36   收藏:0   阅读:0

图解Spring的循环依赖

前言

Spring的循环依赖是spring架构设计中比较精彩的一环,学习Spring的循环依赖设计,对我们进行业务架构设计还是很有裨益的。

这里通过debug介绍一下,spring如何通过三级缓存来实现循环依赖的。

spring的三级缓存

spring通过三级缓存来实现循环依赖就需要了解spring的三级缓存机制。

spring缓存在BefaultSingletonBeanRegistry中。

技术图片

处理循环依赖的过程中并不是每个对象都要经历三个缓存。

创建Demo

我们创建两个对象A,B,同时A依赖B,B依赖A。通过debug来看spring是怎么处理循环依赖的。

public class B {

	protected final Log logger = LogFactory.getLog(getClass());

	private A a;

	public A getA() {
		return a;
	}

	public void setA(A a) {
		logger.info("B createing ......");
		this.a = a;
	}
}
public class A {
	protected final Log logger = LogFactory.getLog(getClass());
	private B b;

	public B getB() {
		return b;
	}

	public void setB(B b) {
		logger.info("a creating....");
		this.b = b;
	}
}

同时配置xml配置文件。

	<bean id="a" class="com.leven.spring.reader.cycle.A">
		<property name="b" ref="b"/>
	</bean>

	<bean id="b" class="com.leven.spring.reader.cycle.B">
		<property name="a" ref="a"/>
	</bean>

Debug演示

这里我画了个流程图,通过流程图比文字更加容易理解。欢迎大家点赞。

https://www.processon.com/view/60770cf05653bb2e1c68f830

文字后续再补充。。。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!