java - 如何在 Spring 中为(非静态)内部类定义一个 bean?避免循环依赖

标签 java spring inner-classes circular-dependency

我有一个像这样的内部类的类:

package myPackage;

public class A {
    private B b;

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

    public class B {
    }
}

我的 spring 配置如下:

<bean id="a" class="myPackage.A" autowire="byName" scope="prototype">
    <property name="b">
        <bean class="myPackage.A$B" name="b" autowire="byName" scope="prototype">
            <constructor-arg ref="a"/>
        </bean>
    </property>
</bean>

但是我遇到了这个错误:

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'a': Requested bean is currently in creation: Is there an unresolvable circular reference?

当然很明显我有一个循环引用,但是我的内部类怎么会有一个spring bean呢?

最佳答案

如果您需要将 a 限定为原型(prototype),我不确定这是否可以在 Spring 级别解决。问题是您正在尝试创建 a 的实例,它需要引用 a b,而 b 又引用一个不同的 a 的实例(因为每次注入(inject) bean 时原型(prototype)都会为您提供一个新实例),等等。如果您真正想要的是 a 成为包含 b 的原型(prototype) bean,它引用 相同a 封闭实例 那么您将不得不使用 Java 配置或工厂 bean。

关于java - 如何在 Spring 中为(非静态)内部类定义一个 bean?避免循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15783854/

相关文章:

java - 具有方法名称和与外部类不同的签名的内部类

java - Android 房间持久性查询返回空值

java - 是什么原因导致该按钮崩溃?

java - 如何开始使用JFreeChart?

java - Android 网络服务 asp .asmx

java - Spring : call REST API after receiving response from another REST API

java - 如何在微服务架构的不同层中使用nodejs和java?

Spring (启动): what's the difference between reaching EOL and no more OSS support?

oop - 在 TypeScript 中访问外部类的成员

java - 为什么我需要提供封闭类对象而不是封闭类对象