Spring的IOC(反向控制)

来源:互联网 发布:js清空input内容兼容ie 编辑:程序博客网 时间:2024/04/30 08:11

IoC直观的讲,就是容器控制程序之间关系,而非传统实现中,由程序代码直接操控。这就是所谓的“控制反转”的概念所在。控制权由应用代码中转到了外部容器,,控制权的转移就是所谓反转。

Ioc还有另外一个名字 -- “依赖注入”(Dependecy Injection),所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的说,即有容器动态的将某种依赖关系注入到组件之中。

Ioc的三种依赖注入类型如下:

1、通过接口注入,这种方式要求我们的类必须实现容器给定的一个接口,然后容器会利用这个接口给我们这个类注入它的依赖类。
public class Girl implements Servicable {

Kissable kissable;
public void service(ServiceManager mgr) {
kissable = (Kissable)mgr.lookup("kissable");
}

public void kissYourKissable() {
kissable.kiss();
}
}

配置文件:
<container>
<component name="kissable" class="Boy">
<configuration>......</configuration>
</component>
<component name="girl" class="Girl"/>
</container>
2、通过setter方法注入,这种方式是Spring推荐的方式。
public class Gril {
private Kissable kissable;
public void setKissable(Kissable kissable) {
this.kissable = kissable;
}

public void kissYourKissable() {
kissable.kiss();
}
}
配置
<beans>
<bean id = "boy" class = "Boy"/>
<bean id = "girl" class = "Gril">
<property name = "kissable">
<ref bean = "boy"/>
</property>
</bean>
</beans>
3、通过构造方法注入,这种方式Spring同样给予了实现,它和通过setter方法一样,都在类里无任何侵入性,但是不是没有侵入性,只是把侵入性转移了。
public class Gril {
private Kissable kissable;
public Gril(Kissable kissable) {
this.kissable = kissable;
}

public void kissYourKissable() {
kissable.kiss();
}
}
0 0