spring循环依赖及解决方式

2025-01-11 00:00:34 数码硬件

spring循环依赖解决方案 

Spring循环依赖的解决方案有以下几种:

1. 无需代理场景使用原始对象:原始对象相互注入没有问题,检查不需要生成代理的类。

2. @lazy解耦:发现有@lazy注解的依赖为其生成代理类,依赖代理类,从而实现了解耦。@Lazy用来标识类是否需要延迟加载;@Lazy可以作用在类上、方法上、构造器上、方法参数上、成员变量中;@Lazy作用于类上时,通常与@Component及其衍生注解配合使用;@Lazy注解作用于方法上时,通常与@Bean注解配合使用。

3. 抽取公共逻辑:业务层面重构,不再相互依赖而是依赖公共模块,并且各个对外业务与内部接口拆分。

4. 开启允许循环依赖的配置:在配置文件中配置开启允许循环依赖,项目就能正常启动了。

需要注意的是,虽然Spring允许Bean对象的循环依赖,但实际上,项目中存在Bean的循环依赖,是Bean对象职责划分不明确、代码质量不高的表现,如果存在大量的Bean之间循环依赖,那么代码的整体设计也就越来越糟糕。所以 SpringBoot在后续的版本中默认把循环依赖给禁用了,从2.6版本开始,如果你的项目里还存在循环依赖,SpringBoot将拒绝启动。

版权说明: 本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。