1、容器及其管理的组件所提供的最重要的好处就是可拔插的体系结构。
2、控制反转:在组件类中,不需要使用新的操作符(一般为new)来实例化依赖组件,
而是在运行时由容器实例将依赖组件(A)注入组件(B)-->(组件B的功能实现需要依赖组件A,传统的做法是组件B自己手动注入组件A来实现功能,但是这样组件B就与组件A产生了耦合,而如果使用Spring容器,组件A的创建和注入工作都交由容器实例来完成,以类似于服务的形式实现组件B对组件A的依赖,解开B与A的耦合)。因此,对依赖项的控制由组件自身转移到容器。
3、依赖注入:依赖注入的基本原则是应用程序对象不应该负责查找它们所依赖的资源或协作者,
而是应该由IoC容器处理对象创建和依赖注入,从应用程序代码转移到容器。
4、循环依赖:在利用构造函数进行依赖注入的过程中有一个明显的缺点,就是不能处理
循环依赖,何为循环依赖呢?例如,如果有两个Bean----a和b,儿这两个Bean通过各自的构造函数
互为依赖,那么Spring将无法实例化这两个Bean。这是因为当第一个Bean被创建时,期待第二个Bean被注入到
自身。然而,此时第二个Bean也处于创建阶段,并且也期待第一个Bean作为自己的依赖项
(感觉有点像线程的死锁)。这样就会在应用程序中导致BeanCurrentlyInCreationException。
5、一个Bean在被完全创建且自己的依赖被注入之前是不会作为一个依赖项被注入到其他Bean中去的。
6、如果Bean a直接或间接依赖Bean b,那么可以肯定Spring容器首先创建Bean b。而如果两个Bean定义彼此之间没有直接或间接依赖,那么Bean创建的顺序就有Spring容器内部决定。
7、depends-on用来指定Bean创建的顺序。
<bean id="a" class="com.wiley.beginningspring.ch2.A" depends-on="b,c">