读书人

1.3 IoC框架与依赖注入(Dependency I

发布时间: 2013-01-23 10:44:49 作者: rapoo

1.3 IoC框架与依赖注入—ependency Injection)模式

在我眼里,目前常见的两个术语依赖倒置原则DIP控制反转IoC,基本上是没有价值的术语。(因为我有回调这个术语

但是,于此同时,我会将依赖注入—ependency Injection)作为一种设计模式。

所以,IoC与依赖注入不可同日而语。但是现在到处是IoC框架,没有价值的IoC废物利用就权当DI的同义词。

package di;/** * C2.java. *  * @author yqj2065 * @version 0.1 */public class C2{    private S service;    public C2(S service){        this.service=service;    }    public void setS(S service){        this.service=service;    }    public void show(){        if(service!= null){            this.service.foo();        }else{            System.out.println("没有初始化");        }    }}


站在C2的角度上说,依赖注入(Dependency Injection)是一个非常简单的概念。C2虽然与接口、抽象类甚至具体类S耦合,但是C2不需要关心如何初始化S2,C2中提供public的构造器C2(S s)或设置方法setS(S s),坐等某个类将初始化后的S对象(的引用)传递进来。

IoCFramework类(名字好大)

package di;import tips.FromPropertyFile;/** * IoCFramework.java. *  * @author yqj2065 * @version 0.1 */public class IoCFramework{    //private FromPropertyFile config = new FromPropertyFile();//从属性文件中读取某个字符串。    public static S createServices(){        String typeName = new FromPropertyFile().getString("ioc.properties","typeName");S service=null;if(typeName!=null){try {service=(S)Class.forName(typeName).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}return service;    }    public static void test(){         S service = IoCFramework.createServices();         C2 client = new C2();         client.setS(service);         client.show();    }}


链接:

    Martin Fowler Inversion of Control Containers and the Dependency Injection patternInversionOfControlShivprasad koirala, 12 Jun 2010 Design pattern Inversion of control and Dependency injection 好多图。

读书人网 >软件架构设计

热点推荐