我有一个像这样的内部类的类:
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/