在没有IOC的时代,A依赖B接口,但是接口又不能实例化,因此A需要知道B的子类,然后实例化B的子类,这种依赖实际上是依赖具体实现,而不是依赖接口,不符合面向对象设计原则依赖倒置原则。...那么IOC的出现就是为了反转这个依赖,也就是控制反转的意义。有了IOC,A只需要依赖B的接口,运行时需要B的实现子类会自动注入进来,这是IOC的魅力所在。...B的创建依赖A
public B(A a) {
this.a = a;
}
}
那么结果自然是死锁,A需要B才能实例化,B需要A才能实例化,系统中有没有两个类的实例,互相僵持就是死锁,无法解决循环依赖问题...解决办法也很简单,就是获取到代理类,然后再执行这个方法,对于Spring,可以从ApplicationContext中获取到当前的HelloService实例,这里获取到的自然是代理类,然后利用该实例调用...动态代理之后会产生一个代理类,那么把这个类当成target,也就是AOP后要转向的真实类操作,封装后然后接着AOP,就实现了嵌套.本质上是一样的道理,既然都是实实在在的类,那么就可以一直嵌套下去,这样的嵌套一般会形成一个功能链