依赖注入 – 控制反转与依赖注入

前端之家收集整理的这篇文章主要介绍了依赖注入 – 控制反转与依赖注入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
根据Martin Fowler写的文章http://martinfowler.com/bliki/InversionOfControl.html,控制的反转是程序的控制流被反转的原理:代替程序员控制程序的流程,外部源(框架,服务,其他组件)采取控制它。这就像我们把东西插入别的东西。他提到了一个关于EJB 2.0的例子:

For example the Session Bean interface@H_301_3@ defines ejbRemove,ejbPassivate@H_301_3@ (stored to secondary storage),and@H_301_3@ ejbActivate (restored from passive@H_301_3@ state). You don’t get to control when@H_301_3@ these methods are called,just what@H_301_3@ they do. The container calls us,we@H_301_3@ don’t call it.

这导致框架和库之间的区别:

Inversion of Control is a key part of@H_301_3@ what makes a framework different to a@H_301_3@ library. A library is essentially a@H_301_3@ set of functions that you can call,@H_301_3@ these days usually organized into@H_301_3@ classes. Each call does some work and@H_301_3@ returns control to the client.

我认为,DI是IOC的观点,意味着一个对象的依赖被反转:它控制自己的依赖,生命周期…别的什么为你。但是,当你告诉我关于DI的手,DI不一定是IOC。我们仍然可以有DI和没有IOC。

然而,在本文(来自Pococapsule,另一个IOC框架的C/C++),它表明,由于IOC和DI,IOC容器和DI框架远远优于J2EE,因为J2EE将框架代码混合到组件,因此不会使其成为普通Java / C对象(PO​​JO / POCO)。

除了依赖注入模式之外的控制容器的反转:http://www.pocomatic.com/docs/whitepapers/ioc-vs-di/

额外的阅读,以了解什么是旧的基于组件的开发框架的问题,这导致上面的第二篇文章:为什么和什么反转控制:http://www.pocomatic.com/docs/whitepapers/ioc/

我的问题:什么是IOC和DI?我很困惑。基于pococapsule,IOC是更重要的,而不仅仅是反转对象的控制或在程序员和框架之间。

IoC是一个通用术语,而不是应用程序在框架中调用方法,框架调用由应用程序提供的实现。

DI是IoC的一种形式,其中实现通过constructors / setters / service查找传递到对象,对象将依赖它来正确地运行。

IoC没有使用DI,例如将是模板模式,因为实现只能通过子类改变。

DI框架旨在利用DI,并且可以定义接口(或Java中的注释),以便于在实现中传递。

IoC容器是DI框架,可以在编程语言之外工作。在某些情况下,您可以配置在元数据文件(例如XML)中使用哪些实现,这些实现是侵入性较小的。有些你可以做IoC通常是不可能的注入实现在pointcuts

参见http://martinfowler.com/articles/injection.html#InversionOfControl

猜你在找的设计模式相关文章