iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何解决Spring循环依赖问题
  • 108
分享到

如何解决Spring循环依赖问题

2023-07-02 17:07:15 108人浏览 八月长安
摘要

本文小编为大家详细介绍“如何解决spring循环依赖问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何解决Spring循环依赖问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。公共代码package&nbs

本文小编为大家详细介绍“如何解决spring循环依赖问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何解决Spring循环依赖问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

公共代码

package com.example.controller; import com.example.tmp.A;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.WEB.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController; @RestControllerpublic class HelloController {    @Autowired    private A a;     @GetMapping("/test1")    public String test1() {        return a.getTest();    }}

方案1. Feild注入单例(@AutoWired)

代码

package com.example.tmp; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; @Componentpublic class A {    @Autowired    private B b;     private String name = "Tony";     public String getName() {        return name;    }     public void setName(String name) {        this.name = name;    }     public String getTest() {        return b.getAge().toString() + name;    }}
package com.example.tmp; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; @Componentpublic class B {    @Autowired    private A a;     private Integer age = 20;     public Integer getAge() {        return age;    }     public void setAge(Integer age) {        this.age = age;    } }

测试

启动不报错。

postman访问:Http://localhost:8080/test1

后端结果:不报错

postman结果: 20Tony

方案2. 构造器注入+@Lazy

延迟加载:在注入依赖时,先注入代理对象,当首次使用时再创建对象完成注入。

代码

package com.example.tmp; import org.springframework.context.annotation.Lazy;import org.springframework.stereotype.Component; @Componentpublic class A {    private B b;     public A(@Lazy B b) {        this.b = b;    }     private String name = "Tony";     public String getName() {        return name;    }     public void setName(String name) {        this.name = name;    }     public String getTest() {        return b.getAge().toString() + name;    }}
package com.example.tmp; import org.springframework.context.annotation.Lazy;import org.springframework.stereotype.Component; @Componentpublic class B {    private A a;     public B(@Lazy A a) {        this.a = a;    }     private Integer age = 20;     public Integer getAge() {        return age;    }     public void setAge(Integer age) {        this.age = age;    } }

测试

启动不报错。

postman访问:http://localhost:8080/test1

后端结果:不报错

postman结果: 20Tony

方案3. Setter/Field注入单例

代码

package com.example.tmp; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; @Componentpublic class A {    private B b;     private String name = "Tony";     public String getName() {        return name;    }     public void setName(String name) {        this.name = name;    }     public String getTest() {        return b.getAge().toString() + name;    }     public B getB() {        return b;    }     @Autowired    public void setB(B b) {        this.b = b;    }}
package com.example.tmp; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; @Componentpublic class B {    private A a;     private Integer age = 20;     public Integer getAge() {        return age;    }     public void setAge(Integer age) {        this.age = age;    }     public A getA() {        return a;    }     @Autowired    public void setA(A a) {        this.a = a;    }}

测试 

启动不报错。

postman访问:http://localhost:8080/test1

后端结果:不报错

postman结果: 20Tony

方案4. @PostConstruct

代码

package com.example.tmp; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Componentpublic class A {    @Autowired    private B b;     @PostConstruct    public void init() {        b.setA(this);    }     private String name = "Tony";     public String getName() {        return name;    }     public void setName(String name) {        this.name = name;    }     public String getTest() {        return b.getAge().toString() + name;    }}
package com.example.tmp; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; @Componentpublic class B {    @Autowired    private A a;     private Integer age = 20;     public Integer getAge() {        return age;    }     public void setAge(Integer age) {        this.age = age;    }     public A getA() {        return a;    }     public void setA(A a) {        this.a = a;    }}

测试 

启动不报错。

postman访问:http://localhost:8080/test1

后端结果:不报错

postman结果: 20Tony

方案5. 实现ApplicationContextAware与InitializingBean

代码 

package com.example.tmp; import org.springframework.beans.BeansException;import org.springframework.beans.factory.InitializingBean;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component; @Componentpublic class A implements ApplicationContextAware, InitializingBean {    private B b;     private ApplicationContext context;     private String name = "Tony";     public String getName() {        return name;    }     public void setName(String name) {        this.name = name;    }     public String getTest() {        return b.getAge().toString() + name;    }     @Override    public void afterPropertiesSet() throws Exception {        this.b = context.getBean(B.class);    }     @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        this.context = applicationContext;    }}
package com.example.tmp; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; @Componentpublic class B {    @Autowired    private A a;     private Integer age = 20;     public Integer getAge() {        return age;    }     public void setAge(Integer age) {        this.age = age;    }}

测试 

启动不报错。

postman访问:http://localhost:8080/test1

后端结果:不报错

postman结果: 20Tony

读到这里,这篇“如何解决Spring循环依赖问题”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何解决Spring循环依赖问题

本文链接: https://www.lsjlt.com/news/343096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • spring循环依赖问题如何解决
    本篇内容介绍了“spring循环依赖问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、三种循环依赖的情况①构造器的循环依赖:这种...
    99+
    2023-07-02
  • 如何解决Spring循环依赖问题
    本文小编为大家详细介绍“如何解决Spring循环依赖问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何解决Spring循环依赖问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。公共代码package&nbs...
    99+
    2023-07-02
  • 怎么解决Spring循环依赖问题
    本篇内容介绍了“怎么解决Spring循环依赖问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言循环依赖...
    99+
    2024-04-02
  • Spring循环依赖问题怎么解决
    在Spring中,循环依赖问题是指两个或多个bean之间出现相互依赖的情况。由于Spring容器默认使用单例模式管理bean,因此循...
    99+
    2023-08-31
    Spring
  • springbean循环依赖问题如何解决
    Spring框架可以通过使用构造函数注入和setter方法注入两种方式来解决循环依赖问题。1. 构造函数注入:在循环依赖的类中,通过...
    99+
    2023-09-29
    springbean
  • maven循环依赖问题如何解决
    Maven循环依赖问题可以通过以下几种方式解决:1. 重新设计项目结构:循环依赖通常是由于项目结构设计不合理引起的。可以重新考虑项目...
    99+
    2023-09-17
    maven
  • spring中如何解决循环依赖
    这期内容当中小编将会给大家带来有关spring中如何解决循环依赖,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.由同事抛的一个问题开始我们先看看当时出问题的代码片段:@...
    99+
    2024-04-02
  • 怎么在spring中解决循环依赖问题
    怎么在spring中解决循环依赖问题?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。setter singleton循环依赖使用SingleSetterBeanA依赖Sing...
    99+
    2023-06-08
  • 如何解决Java循环依赖的问题
    今天就跟大家聊聊有关如何解决Java循环依赖的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。最近看到一个问题:如果有两个类A和B,A类中有一个B的对象b,B类中有一个A的对象a,...
    99+
    2023-06-02
  • 如何解决spring检测循环依赖
    今天就跟大家聊聊有关检测循环怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天为CodeTop补充的题目是检测循环依赖。循环依赖检测。如,[[...
    99+
    2024-04-02
  • 关于spring循环依赖问题及解决方案
    目录一、三种循环依赖的情况比如几个Bean之间的互相引用 甚至自己“循环”依赖自己二、解决方案如何获取依赖三、解决循环依赖必须要三级缓存吗结论四、无...
    99+
    2024-04-02
  • Spring轻松解决循环依赖
    目录解决循环依赖的原理源码解析总结Spring 框架是一个流行的Java应用程序框架,它提供了许多强大的功能,如依赖注入和面向切面编程。然而在使用 Spring 框架时,我们可能会遇...
    99+
    2023-05-16
    Spring循环依赖怎么解决 Spring循环依赖
  • Spring怎么解决循环依赖
    本篇内容介绍了“Spring怎么解决循环依赖”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写在前面最近,在...
    99+
    2024-04-02
  • Spring循环依赖之问题复现详解
    目录简介问题复现1.构造器注入2.Feild注入多例(@AutoWired) 3.Setter注入多例(@AutoWired) 解决方案简介 说明 本文介绍Spr...
    99+
    2024-04-02
  • springboot怎么解决循环依赖问题
    在Spring Boot中解决循环依赖问题,可以尝试以下几种方法:1. 使用构造器注入:将循环依赖的对象注入到构造器中,并且使用`@...
    99+
    2023-09-27
    springboot
  • Spring中怎么处理循环依赖问题
    Spring中怎么处理循环依赖问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是循环依赖依赖指的是Bean与Bean之间的依赖关系,循环依赖指的是两个或者...
    99+
    2023-06-20
  • Spring使用三级缓存解决循环依赖的问题
    Spring如何使用三级缓存解决循环依赖在没开始文章之前首先来了解一下什么是循环依赖 @Component public class A { @Autowired ...
    99+
    2024-04-02
  • Spring循环依赖产生与解决
    目录循环依赖产生情景Spring如何解决循环依赖循环依赖产生情景 探讨如何解决循环依赖之前,更应该思考清楚什么情况下会发生这种问题? 1、模拟Prototype Bean的循环依赖 ...
    99+
    2022-12-20
    Spring如何解决循环依赖 Spring循环依赖
  • Spring循环依赖的解决方法
    这篇文章主要介绍Spring循环依赖的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!循环依赖其实就是循环引用,很多地方都说需要两个或则两个以上的bean互相持有对方最终形成闭环才是循环依赖,比如A依赖于B,B...
    99+
    2023-06-06
  • maven循环依赖如何解决
    Maven循环依赖是指两个或多个模块之间相互依赖的情况,导致编译和构建过程中出现问题。为了解决 Maven 循环依赖问题,可以尝试以...
    99+
    2024-04-08
    maven
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作