В какой-то момент вам нужно указать внешний объект, этого избежать нельзя. Однако вы можете перенести это в Java и из XML, добавив фабричный метод к A
, который создает внутреннее B
:
public class A {
public class B {}
B b;
public void setB(B b) {this.b = b;}
public B createB() {return new B();} // this is new
}
И тогда вы можете сделать:
<bean id="a" class="test.A">
<property name="b">
<bean id="b" factory-bean="a" factory-method="createB"/>
</property>
</bean>
Так что XML проще, но Java сложнее. Spring достаточно умен, чтобы не расстраиваться из-за очевидных циклических ссылок.
Выберите, вам нужно сделать одно или другое.