Spring bean循环依赖
Spring循环引用#
循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。
比如A依赖于B,B依赖于A。循环依赖在spring中是允许存在,spring框架依据三级缓存
已经解决了大部分的循环依赖。
- 一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象。
- 二级缓存:缓存早期的bean对象(生命周期还没走完)。
- 三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象的。
构造方法循环依赖#
A依赖于B,B依赖于A,注入的方式是构造函数。
原因:由于bean的生命周期中构造函数是第一个执行的,spring框架并不能解决构造函数的的依赖注入。
解决:使用@Lazy
进行懒加载,什么时候需要对象再进行bean对象的创建。
public class A {
private B b;
public A(@Lazy B b) {
System.out.println("A的构造方法执行了.....");
this.b = b;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南