[SpringBoot 2.x.x] 循环依赖The dependencies of some of the beans in the application context form a cycle

这篇具有很好参考价值的文章主要介绍了[SpringBoot 2.x.x] 循环依赖The dependencies of some of the beans in the application context form a cycle。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot 2.x.x 循环依赖

报错信息

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   firTestController
┌─────┐
|  userServiceImpl
↑     ↓
|  systemServiceImpl
└─────┘


Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

Disconnected from the target VM, address: '127.0.0.1:55987', transport: 'socket'

问题原因

// IUserService 接口
public interface IUserService {
    void getUserInfo();
}

// UserServiceImpl 类实现 IUserService 接口
@Component
public class UserServiceImpl implements IUserService {

    @Autowired
    private ISystemService systemService;

    @Override
    public void getUserInfo() {
        System.out.println("Get user info");
    }
}

// ISystemService 接口
public interface ISystemService {
    void getSystemInfo();
}

// SystemServiceImpl 类实现 ISystemService 接口
@Component
public class SystemServiceImpl implements ISystemService {

    @Autowired
    private IUserService userService;

    @Override
    public void getSystemInfo() {
        System.out.println("Get system info");
    }
}

// FirTestController 类
@Component
public class FirTestController {

    @Autowired
    private IUserService userService;
}

提供的例子中,存在循环依赖的原因如下:

UserServiceImpl 依赖于 ISystemService 接口,它的字段 systemService 被 @Autowired 注解注入。
SystemServiceImpl 类实现了 ISystemService 接口,它的字段 userService 被 @Autowired 注解注入。
FirTestController 类依赖于 IUserService 接口,它的字段 userService 被 @Autowired 注解注入。
这样,一个循环的依赖链就形成了:

UserServiceImpl 依赖于 ISystemService
SystemServiceImpl 依赖于 IUserService
FirTestController 依赖于 IUserService
当 Spring 容器启动时,它会尝试解析和创建这些 bean。在解析 UserServiceImpl 时,它会注入一个 ISystemService 实例,而这个实例是 SystemServiceImpl。在解析 SystemServiceImpl 时,它会注入一个 IUserService 实例,而这个实例是 UserServiceImpl。这样就形成了一个循环的依赖链,导致 Spring 容器无法成功创建这些 bean,最终抛出循环依赖的异常。

解决方式

   /**
     * 用户 接口层
     */
    private IUserService iUserService;

    @Autowired
    public void setUserService(@Lazy IUserService iUserService) {
        this.iUserService = iUserService;
    }

采用了 @Lazy 注解来解决循环依赖的问题,这是一种有效的方式。通过将 @Lazy 注解添加到 setUserService 方法上,延迟了 IUserService bean 的初始化,避免了在初始化 UserServiceImpl 时立即创建 IUserService bean 导致的循环依赖问题。

在 Spring 中,@Lazy 注解用于指定 bean 是否应该在需要时被延迟初始化。当一个 bean 被标记为 @Lazy 时,它的初始化会被推迟到第一次被注入或使用时。

通过将 @Lazy 注解应用于循环依赖链中的一个 bean,可以打破循环依赖,使得 Spring 能够成功初始化这些 bean。

解决Spring循环依赖的一般原则之一,即延迟初始化。文章来源地址https://www.toymoban.com/news/detail-856517.html

到了这里,关于[SpringBoot 2.x.x] 循环依赖The dependencies of some of the beans in the application context form a cycle的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definiti

    Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true 解决方法: 在application.yml或你项目对应的配置文件中添加如下代码: 实践验证: 为了验证该配置信息是否会造成覆盖问题,现模拟一下情况: 项目中有feign模块、service_user模块、serv

    2024年02月04日
    浏览(46)
  • 台式电脑(ubuntu系统)开机界面循环This product is covered by one or more of the following patents

    开机界面如图所示 问题出现原因:主机太久没开机了,主板默认把uefi改为了legacy 解决办法 进入bios设置,将boot filter设置为uefi

    2024年02月10日
    浏览(37)
  • 一文详解Spring Bean循环依赖

    一、背景 有好几次线上发布老应用时,遭遇代码启动报错,具体错误如下: 眨眼一看,这不就是Spring Bean循环依赖报错吗?脑海立马闪过那些年为了进阿里面试时被死亡N连问的场景,那时我们都知道Spring已经支持bean循环依赖,为啥我们的Springboot应用启动时还报这个错误?带

    2024年02月15日
    浏览(25)
  • spring实例化bean之循环依赖

    serviceA里注入了serviceB,serviceB里又注入了serviceA,这样在实例化serviceA时,在doCreateBean时的populateBean时会先实例化serviceB,然后实例化serviceB,在serviceB的doCreateBean方法的populateBean又会去找servcieA,这样循环依赖就产生了。 解决办法就是在populateBean之前把当前的serviceA提前暴露,然

    2024年02月08日
    浏览(28)
  • 深谈Spring如何解决Bean的循环依赖

    Java循环依赖指的是两个或多个类之间的相互依赖,形成了一个循环的依赖关系,这会导致程序编译失败或运行时出现异常。下面小岳就带大家来详细分析下Java循环依赖。 简单来讲就是:假设有两个人是:A和B, A想要向B借钱,但B需要先向A借钱。 这种情况就形成了循环依赖

    2023年04月17日
    浏览(32)
  • The following packages have unmet dependencies解决方法

    ubuntu - How do I resolve `The following packages have unmet dependencies` - Stack Overflow

    2024年02月13日
    浏览(31)
  • 小白做毕设,遇到报错:Error creating bean with name ‘userController‘: Injection of resource dependencies failed

    目录 一、遇到报错 二、解决报错方法 在做那个小白做毕设的时候,项目是springboot+vue2.0。在用代码生成器后,启动遇到了如下的问题。   Error creating bean with name \\\'userController\\\': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException:

    2024年02月08日
    浏览(34)
  • IDEA报错:[ERROR] Some problems were encountered while processing the POMs

    报错信息:在处理Pom时发生了错误 无法解析父POM:xxx:x.x.x-RELEASE:找不到com.x.x:xxx:POM:x.x.x-RELEASEhttps://repo.maven.apache.org/maven2已缓存在本地存储库中,在经过中心的更新间隔或强制更新并且“parent.relativePath”指向错误的本地POM 点击File-Setting搜索Maven,点入以下页面,查看Maven的路

    2024年02月09日
    浏览(31)
  • 【运行问题】Some problems were encountered while building the effective model for

    问题出现情况 ,在我构建springboot的mybatispuls的测试时,出现了该问题,搜寻了各种解决方案,相关方案如下,按照不同的方式自己对照一下可能出现在那。 第一种可能问题 :添加了 重复的依赖jar包 检查自己的依赖是否有重复的jar包导入,参考如下连接 (42条消息) Some probl

    2024年02月15日
    浏览(32)
  • 【Unity报错】Some objects were not cleaned up when closing the scene.

    Unity结束运行的时候报错Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?) 结束运行的时候突然报错,有概率,有时候有有时候没有 结束运行的时候在OnDestroy中调用了Mono的单例类,但是呢OnDestroy调用次序是不同的,有可能A先B后,也有可能是B先

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包