1.3 IoC框架与依赖注入(Dependency Injection)模式
在我眼里,目前常见的两个术语依赖倒置原则DIP和控制反转IoC,基本上是没有价值的术语。(因为我有回调这个术语)
但是,于此同时,我会将依赖注入(Dependency 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(); }}
链接: