5 回答
TA贡献1786条经验 获得超13个赞
循环依赖只会在构造器中产生,spring会抛出UnsatisfiedDependencyException异常
ublic class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Test.xml");
System.out.println(context.getBean("a"));
System.out.println(context.getBean("b"));
}
}
@Component
class A{
@Autowired
public A(B b) {
}
}
@Component
class B{
@Autowired
public B(A a) {
}
}
TA贡献1796条经验 获得超4个赞
TA贡献1802条经验 获得超10个赞
public class A {
private B b;
public A(B b) {
this.b = b;
}
public void say(){
System.out.println("A");
}
}
public class B {
private A a;
public B(A a) {
this.a = a;
}
public void say(){
System.out.println("A");
}
}
肯定有先后顺序,你可以试试在构造方法中对对象赋值。这样spring就会卡在两个对象相互引用上。
如果只是在属性中引用,spring应该会以获取类的顺序先初始化对象,然后根据对象的属性再做赋值,这样就不会出现卡在对象相互引用上了。
TA贡献1784条经验 获得超7个赞
楼上说的对:在容器启动的时候,会把bean实例都初始化好的,你可以试试这样的一种情形,你使用了@Autowired注入一个java bean,但是不配置<bean id="" class="">,你会发现容器在启动的时候会报错,所以说明了,即使是循环依赖的关系,也是:在容器启动的时候,就会初始化好java bean,。。
添加回答
举报