首页 > 其他分享 >SpringBoot 循环依赖

SpringBoot 循环依赖

时间:2023-04-24 17:56:26浏览次数:34  
标签:依赖 SpringBoot 循环 注解 构造函数 public 注入

什么是循环依赖

循环依赖是指在Spring Boot 应用程序中,两个或多个类之间存在彼此依赖的情况,形成一个循环依赖链。当一个类在初始化时需要另一个类的实例,而另一个类又需要第一个类的实例时,就会出现循环依赖问题。

发生情况:

循环依赖是指两个或更多的组件之间存在着互相依赖的关系。在Spring Boot应用程序中,循环依赖通常是由以下几种情况引起的:

  • 构造函数循环依赖: 两个或更多的组件在它们的构造函数中互相依赖。
  • 属性循环依赖: 两个或更多的组件在它们的属性中互相依赖。
  • 方法循环依赖: 两个或更多的组件在它们的方法中互相依赖。

解决方法:

Spring Boot提供了一些解决循环依赖的方法:

  • (1)构造函数注入: 在构造函数中注入依赖项,而不是在属性中注入。
  • public class A {
        private B b;

        public A(B b) {
            this.b = b;
        }
    }

    public class B {
        private A a;

        public B(A a) {
            this.a = a;
        }
    }
  • Setter注入: 使用setter方法注入依赖项,而不是在构造函数中注入。
  • 延迟注入: 使用@Lazy注解延迟加载依赖项。
  • @Autowired注解的required属性: 将required属性设置为false,以避免出现循环依赖问题。
  • @DependsOn注解: 使用@DependsOn注解指定依赖项的加载顺序,以避免出现循环依赖问题

标签:依赖,SpringBoot,循环,注解,构造函数,public,注入
From: https://www.cnblogs.com/KL2016/p/17350341.html

相关文章

  • 解决springboot不能打包问题
    环境:名称版本springboot2.7.11jdk1.8maven3.6.3在pom.xml中添加如下代码:<build><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</......
  • vue 项目依赖安装失败解决方案
    今天电脑新装了个node.js以及VSCode,找了一个之前的vue项目在上面运行了一下。使用npminstall有一部分依赖一直安装不上,输入npmrunserver一直提示 vue-cli报错,试了下面的方式还是不行。 一、使用淘宝镜像安装依赖:1.安装cnpm   npminstall-gcnpm--registry......
  • Springboot将自定义jar包引入pom
    Springboot将自定义jar包引入pom Springboot将自定义jar包引入pom <dependency><groupId>TrendDB_API</groupId><artifactId>TrendDB_API</artifactId><version>1.0</version>......
  • springboot项目配置多个kafka
    1.spring-kafka<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>1.3.5.RELEASE</version></dependency>2.配置文件相关信息kafka.bootstrap-servers=local......
  • springboot集成redis时总报错Connection refused: no further information: localhost
    nacos上配置的关于redis的key值不是springboot需要的固定写法如:sping.redis.host=spring.redis.port=sping.redis.password=spring.redis.database=我写的是一个自定义的key如com.dream.redis.host改为springboot认识的即可其他和springboot集成的组件类似,切记......
  • 快慢指针判断链表中是否存在循环
    给链表设置快慢两个指针,每次移动时,快指针的速度是慢指针的一倍。即每次快指针移动两次,慢指针移动一次。如果存在循环,快指针跑两圈就可以追上慢指针。 为什么不让慢指针停在原地等呢?因为循环有可能出现在中间位置。如此一来,循环过的位置就不必从头再循环。 整个过程的所有......
  • .NET Core 依赖注入
    在.NETCore中,依赖注入(DependencyInjection,简称DI)是框架的一个重要特性,可以帮助我们解耦代码、管理对象生命周期以及提高可测试性等.一下是.NETCore中依赖注入的一些基本概念和用法:1、服务(Service):在DI中,服务即一个对象或者类型。用于完成特定的功能.例如,数据库访问、......
  • electron-builder 打包依赖文件放入指定目录
    1.C:\Users\Liper\AppData\Local\electron-builder\Cache2.nsis-resources-3.4.1.7z3.nsis-3.0.4.1.7z4.winCodeSign-2.6.0......
  • SpringBoot 文件打包zip,浏览器下载出去
    本地文件打包@GetMapping("/downloadZip")publicvoiddownloadZip(HttpServletResponseresponse)throwsIOException{try{response.setContentType("application/octet-stream");response.setHeader("......
  • js循环调用接口,获取每一次接口的值
    vue代码。data数据:list:[{listName:"待办",listNum:0},{listName:"退回",listNum:0},{listName:"已办",listNum:0},{listName:"全部",listNum:0}],methods里面的方法:asyncgetAllData(){this.list......