当前位置: 首页 > 知识库问答 >
问题:

Spring。使用java config而不使用@AutoWired解决循环依赖

陈飞
2023-03-14
public class A {
    private B b;

    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }
}

public class B {
    private A a;

    public A getA() {
        return a;
    }

    public void setA(A a) {
        this.a = a;
    }
}
@Configuration
public class Config {
    @Bean
    public A a() {
        A a = new A();
        a.setB(b());
        return a;
    }

    @Bean
    public B b() {
        B b = new B();
        b.setA(a());
        return b;
    }
}

和配置类字段的@Autowired:

@Configuration
public class Config {
    @Autowired
    A a;
    @Autowired
    B b;

    @Bean
    public A a() {
        A a = new A();
        a.setB(b);
        return a;
    }

    @Bean
    public B b() {
        B b = new B();
        b.setA(a);
        return b;
    }
}

我也用@lazy注释尝试了上面的所有方法。于事无补。但如果我用@autowired对A和B的setter进行注释,就可以很好地工作。但这不是我现在想要的。我做错了什么?有没有什么方法可以不使用@AutoWired来解决java配置中的循环依赖?

共有1个答案

易淳
2023-03-14

您希望获得的行为如下所示

A a = new A();
B b = new B();
a.setB(b);
b.setA(a);

@bean方法不提供这一点。它们运行到完成以提供一个bean实例。

您基本上必须部分创建其中一个实例,然后在创建另一个实例时完成初始化。

@Configuration
class Config {
    @Bean
    public A a() {
        A a = new A();
        return a;
    }

    @Bean
    public B b() {
        B b = new B();
        A a = a();
        b.setA(a);
        a.setB(b);
        return b;
    }
}
@Bean
public B b(A a) {
    B b = new B();
    b.setA(a);
    a.setB(b);
    return b;
}
 类似资料:
  • 问题内容: 我也在学习Java和android。我们可以在while循环中执行的几乎所有事情都可以在while循环中执行。 我发现一个简单的条件,使用while循环比for循环更好 如果我必须在程序中使用counter的值,那么我认为while循环要比for循环好 使用while循环 在这种情况下,我发现while循环要比for循环好,因为如果要在for循环中实现相同的效果,则必须将counter

  • 本文向大家介绍详解Spring Bean的循环依赖解决方案,包括了详解Spring Bean的循环依赖解决方案的使用技巧和注意事项,需要的朋友参考一下 如果使用构造函数注入,则可能会创建一个无法解析的循环依赖场景。 什么是循环依赖 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图: 注意,这里不是函数的循环调用,

  • 我对Java编码非常陌生,我已经研究这个问题大约4天了。我正在做一个选择你自己的结局故事。当我到达第69行时,如果读者选择是,我希望系统重新开始故事,如果他们选择否,则结束程序。我不确定我是否正确地编码了while循环,或者我甚至可以使用中断;操作员就像我在使用它一样。对不起,我的代码太难看了,哈哈,我正在努力变得更好。感谢您的建议! }

  • 本文向大家介绍Spring中循环依赖的解决方法详析,包括了Spring中循环依赖的解决方法详析的使用技巧和注意事项,需要的朋友参考一下 前言 说起Spring中循环依赖的解决办法,相信很多园友们都或多或少的知道一些,但当真的要详细说明的时候,可能又没法一下将它讲清楚。本文就试着尽自己所能,对此做出一个较详细的解读。另,需注意一点,下文中会出现类的实例化跟类的初始化两个短语,为怕园友迷惑,事先声明一

  • 如果我用MockBean替换Autowired的话,它是有效的,但我不知道为什么

  • 本文向大家介绍详解Spring-bean的循环依赖以及解决方式,包括了详解Spring-bean的循环依赖以及解决方式的使用技巧和注意事项,需要的朋友参考一下 本文主要是分析Spring bean的循环依赖,以及Spring的解决方式。 通过这种解决方式,我们可以应用在我们实际开发项目中。 1. 什么是循环依赖? 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环