日期:2014-05-17  浏览次数:20704 次

Spring 相互注入问题
@Service("A")
public class A {
@Autowired
private B b;

public A(){
System.out.println("****** A is load");
}

public void print(){
System.out.println("A success!!!");
}

}


@Service("B")
public class B {
@Autowired
private A a;

public B(){
System.out.println("****** B is load");
}

}


两个类,用Spring管理,相互注入,为什么不会报错啊= =好郁闷
spring java

------解决方案--------------------
引用:
Quote: 引用:

都能拿到对方实例了


public class A {
    private B b = new B();
     
    public A(){
        System.out.println("****** A is load");
    }
     
    public void print(){
        System.out.println("A success!!!");
    }
     
}


public class B {
    private A a = new A();
     
    public B(){
        System.out.println("****** B is load");
    }
     
}


那为什么这样不行?这两个不是一样的吗?

我来回答你吧,这就是你对spring容器初始化bean不了解导致的,开始时,如果A和B都是容器管理,那么在初始化bean的时候,会先相当于new出来A对象和B对象,然后在分别初始化内部的属性。当然这样的注入不会报错。但如果你是自己new出来的,那就会出现死循环。不知道我的回答你还懂