1. IoC与DI基本概念
- "控制反转"本身是一个大而泛的概念,控制反转"普遍存在,比如事件处理模型、各种类型的接口回调等等,Martin Fowler根据"控制的哪一方面被反转了"这样的原则,把Spring为代表的框架所实现的"控制反转"称之为"依赖注入"。它们的共性是,均反转了"如何定位依赖的具体实现"。
2. 依赖注入的三种形式
3. 服务定位器模式
- 服务定位器(Service Locator)模式并不是IoC的一种实现,因为它并没有实现什么"反转"。
4. 服务定位器和依赖注入的选择
- 这两个模式都提供了基本的解耦合能力——无论使用哪个模式,应用程序代码都不依赖于服务接口的具体实现。两者之间最重要的区别在于,这个"具体实现"以什么方式提供给应用程序代码。使用服务定位器模式时,应用程序代码直接向服务定位器发送一个消息,明确要求服务的实现;使用依赖注入模式时,应用程序代码不发出显式的请求,服务的实现自然会出现在应用程序代码中,这也就是所谓"控制反转"。
- 使用服务定位器模式时,服务的使用者必须依赖于服务定位器。定位器可以隐藏使用者对服务具体实现的依赖,但你必须首先看到定位器本身。所以,选择服务定位器还是依赖注入,取决于"对定位器的依赖"是否会给你带来麻烦。
- Martin Fowler指出,使用DI增加了代码的理解和调试难度,能不使用DI则尽量不要使用,可以使用更直观的服务定位器来实现解耦。但是该观点发表于2004年,目前依赖注入的思想深入人心,理解难度已基本不存在;同时DI框架已经非常成熟,调试、测试都有很方便的辅助工具。
- 和设值注入、服务定位器模式相比,接口注入没有任何优势,因此基本不做考虑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。