java - Spring中的循环依赖

标签 java spring

Spring 是如何解决这个问题的:bean A 依赖于 bean B,而 bean B 依赖于 bean A。

最佳答案

Spring reference manual解释了如何解决循环依赖。 bean 先被实例化,然后相互注入(inject)。

考虑这个类:

package mypackage;

public class A {

    public A() {
        System.out.println("Creating instance of A");
    }

    private B b;

    public void setB(B b) {
        System.out.println("Setting property b of A instance");
        this.b = b;
    }

}

和一个类似的类B:

package mypackage;

public class B {

    public B() {
        System.out.println("Creating instance of B");
    }

    private A a;

    public void setA(A a) {
        System.out.println("Setting property a of B instance");
        this.a = a;
    }

}

如果你有这个配置文件:

<bean id="a" class="mypackage.A">
    <property name="b" ref="b" />
</bean>

<bean id="b" class="mypackage.B">
    <property name="a" ref="a" />
</bean>

使用此配置创建上下文时,您会看到以下输出:

Creating instance of A
Creating instance of B
Setting property a of B instance
Setting property b of A instance

请注意,当 a 被注入(inject) b 时,a 尚未完全初始化。

关于java - Spring中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485347/

相关文章:

java - 为什么 java.lang.ExceptionInInitializerError 没有一个包含消息和原因的构造函数?

Java ArrayPointStoreException 和 NullPointerException

java - CometD - 如何在 tomcat jetty 中运行演示

java - 如果找不到,Spring Autowired null

java - 使用 neo4j-ogm 2.0.x 执行 CYPHER 删除查询时出现 Jackson 异常

java - zk - 文件上传前的 java 文本框验证

java - 使用 Neo4j 和 Spring 进行数据库迁移

nhibernate - 如何使用 NHibernate 和 Spring 为死锁配置 RetryAdvice 和 ExceptionTranslation

java - 多态二叉搜索树类型不匹配错误

java - 在 Spring MVC 中创建应用程序范围的 bean