IOC 是 Spring 容器的内核,AOP、声明式事务等功能都依赖于此功能,它涉及代码解耦,设计模式、代码优化等问题的考量,我们将通过以下三方面来了解 IOC:
1.IOC 的初步理解
2.IOC 的注入类型
3.IOC 的注入方式
IOC 的字面理解:控制 --- 反转,依赖注入 DI 更容易理解 IOC 的概念
DI:让调用类对某一接口实现类的依赖关系由第三方注入,以移除调用类对某一接口实现类的依赖。
从注入方法上看可分为三种类型:
(注意以下实现的三个类 A,B,C,其中 A 有一个方法 action 需要调用 B 的方法 move 来实现,C 将生成的 B 注入给生成的 A 中)
1. 构造函数注入:通过调用类的构造函数,将接口实现类通过构造函数变量传入:
- public class A {
- private B b;
- public A(B b) {
- this.b = b;
- }
- public void action() {
- b.move();
- }
- }
- public class C {
- public void control() {
- B special_b = new B();
- A special_a = new A(special_b);
- special_a.action();
- }
- }
2. 属性注入:通过 Setter 方法完成调用类所需依赖的注入,可以对注入的类进行多次选择,更加灵活方便:
- public class A {
- private B b;
- public void setB(B b) {
- this.b = b;
- }
- public void action() {
- b.move();
- }
- }
- public class C {
- public void control() {
- A a = new A();
- B b = new B();
- A.setB(b);
- A.action();
- }
- }
3. 接口注入:将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的调用方法,由于使用该种方法需要增加一个接口的实现,最终效果和属性注入一直,因此不提倡使用该方法。
Spring 作为一个容器,通过配置文件或者注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作,下面是对以上实例进行配置的配置文件片段:
- <beans>
- <bean id="bean1" class="B" />
- 将类B实例化
- <bean id="bean2" class="A">
- 将类A实例化,同时将类B注入进来
- <property name="move" ref="B" />
- </bean>
- </beans>
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: