IoC(Inversion of Control)内涵解析

来源:互联网 发布:手机淘宝申请免费注册 编辑:程序博客网 时间:2024/06/05 08:43

IoC(Inversion of Control),即所谓的控制反转,从字面上意思来看是控制权的反转,那到底是什么样的控制权的反转呢,下面就以一段简单的代码为例:

public interface Auto {void start();void forward();void back();}

public class Car implements Auto {@Overridepublic void start() {System.out.println("这是一辆小汽车,现在启动");}@Overridepublic void forward() {System.out.println("这是一辆小汽车,现在向前");}@Overridepublic void back() {System.out.println("这是一辆小汽车,现在向后");}}

public class Driver {private Auto auto = new car();void drive(){auto.start();auto.forward();auto.back();}}

当我们新建一个汽车的实例的时候我们使用new方式,如果采用了这种方式,虽然Driver依赖的是一个Auto接口,但依然要通过new的方式生成一个Car的实例,而这个new方法是写死在了Driver代码中,这样Driver就依赖了Car类,这样就使Driver与Auto的具体实现类发生了耦合。那么,如何消除Driver与Auto的具体实现类的耦合呢,这就需要Driver本身不需要关心它所依赖的auto对象具体是什么类型,同时也不需要关心具体对象的实例化过程。这就是IoC容器的作用,在配置文件中,我们既可以配置其依赖对象的bean(从而让IoC容器来代替我们的new方法),也可以组装这个Driver的bean(让IoC容器来为Driver注入auto的实现类的实例,不管是Car还是Trunk)。

话说到这里应该可以做一番总结了,就是IoC容器接管了本来该Driver类自身实现2件事,即依赖类的实例化依赖关系的建立,从而也真正解除了Driver类与Auto接口实现类之间的耦合。这样,在我们的Driver需要依赖另一个Auto的实例类Truck时我们只需要配置一个对应的bean并通过依赖注入(dependency injection,setter方法或constructor实现)实现Driver的装配而不需要改动Driver代码本身。那么控制反转也就是这两件事的控制权反转到了IoC容器上。

0 0
原创粉丝点击