[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-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日
    浏览(18)
  • 台式电脑(ubuntu系统)开机界面循环This product is covered by one or more of the following patents

    台式电脑(ubuntu系统)开机界面循环This product is covered by one or more of the following patents

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

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

    一文详解Spring Bean循环依赖

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

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

    spring实例化bean之循环依赖

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

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

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

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

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

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

    小白做毕设,遇到报错: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日
    浏览(8)
  • IDEA报错:[ERROR] Some problems were encountered while processing the POMs

    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日
    浏览(7)
  • 【运行问题】Some problems were encountered while building the effective model for

    【运行问题】Some problems were encountered while building the effective model for

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

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

    【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日
    浏览(14)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包