1.依赖注入是怎么回事依赖注入和控制反转是同义词 , 已合并 。
控制反转(Inversion of Control , 英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题 。控制反转还有一个名字叫做依赖注入(Dependency Injection) 。
简称DI 。起源 早在2004年 , Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题 。
他总结出是依赖对象的获得被反转了 。基于这个结论 , 他为创造了控制反转一个更好的名字:依赖注入 。
许多非凡的应用(比HelloWorld.java更加优美 , 更加复杂)都是由两个或是更多的类通过彼此的合作来实现业务逻辑 , 这使得每个对象都需要 , 与其合作的对象(也就是它所依赖的对象)的引用 。如果这个获取过程要靠自身实现 , 那么如你所见 , 这将导致代码高度耦合并且难以测试 。
IoC 亦称为 “依赖倒置原理”("Dependency Inversion Principle") 。差不多所有框架都使用了“倒置注入(Fowler 2004)技巧 , 这可说是IoC原理的一项应用 。
SmallTalk,C++, Java 或各种.NET 语言等面向对象程序语言的程序员已使用了这些原理 。控制反转是Spring框架的核心 。
应用控制反转 , 对象在被创建的时候 , 由一个调控系统内所有对象的外界实体 , 将其所依赖的对象的引用 , 传递给它 。也可以说 , 依赖被注入到对象中 。
所以 , 控制反转是 , 关于一个对象如何获取他所依赖的对象的引用 , 这个责任的反转 。编辑本段IoC是设计模式 IoC就是IoC , 不是什么技术 , 与GoF一样 , 是一种设计模式 。
Interface Driven Design接口驱动 , 接口驱动有很多好处 , 可以提供不同灵活的子类实现 , 增加代码稳定和健壮性等等 , 但是接口一定是需要实现的 , 也就是如下语句迟早要执行:AInterface a = new AInterfaceImp(); 这样一来 , 耦合关系就产生了 , 如: Class A { AInterface a; A() { } aMethod() { a = new AInterfaceImp(); } } ClassA与AInterfaceImp就是依赖关系 , 如果想使用AInterface的另外一个实现就需要更改代码了 。当然我们可以建立一个Factory来根据条件生成想要的AInterface的具体实现 , 即: InterfaceImplFactory { AInterface create(Object condition) { if(condition = condA) { return new AInterfaceImpA(); } elseif(condition = condB) { return new AInterfaceImpB(); } else { return new AInterfaceImp(); } } } 表面上是在一定程度上缓解了以上问题 , 但实质上这种代码耦合并没有改变 。
通过IoC模式可以彻底解决这种耦合 , 它把耦合从代码中移出去 , 放到统一的XML 文件中 , 通过一个容器在需要的时候把这个依赖关系形成 , 即把需要的接口实现注入到需要它的类中 , 这可能就是“依赖注入”说法的来源了 。IOC模式 , 系统中通过引入实现了IOC模式的IOC容器 , 即可由IOC容器来管理对象的生命周期、依赖关系等 , 从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开 。
其中一个特点就是通过文本的配件文件进行应用程序组件间相互关系的配置 , 而不用重新修改并编译具体的代码 。当前比较知名的IOC容器有:Pico Container、Avalon 、Spring、JBoss、HiveMind、EJB等 。
在上面的几个IOC容器中 , 轻量级的有Pico Container、Avalon、Spring、HiveMind等 , 超重量级的有EJB , 而半轻半重的有容器有JBoss,Jdon等 。可以把IoC模式看做是工厂模式的升华 , 可以把IoC看作是一个大工厂 , 只不过这个大工厂里要生成的对象都是在XML文件中给出定义的 , 然后利用Java 的“反射”编程 , 根据XML中给出的类名生成相应的对象 。
- 致他翻译英文怎么写
- 双儿的韩文怎么写
- 工作状态详细的怎么写
- 大院出租合同怎么写
- 艾拉用英文怎么写
- sponsorletter怎么写
- low的音标怎么写
- 公司制定目标怎么写
- 怎么写课文段落大意
- 用电申请村委会意见怎么写