@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管理,相互注入,为什么不会报错啊= =好郁闷springjava

解决方案 »

  1.   


    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");
        }
         
    }那为什么这样不行?这两个不是一样的吗?
      

  2.   


    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出来的,那就会出现死循环。不知道我的回答你还懂