【问题标题】:Is IOC container an example of Service locator pattern?IOC 容器是服务定位器模式的一个例子吗?
【发布时间】:2017-06-17 01:13:34
【问题描述】:

Container 允许我们为类提供所需的依赖项。如果容器已知该类,它可以创建任何 bean。是服务定位器的例子吗?

【问题讨论】:

    标签: java spring inversion-of-control service-locator


    【解决方案1】:

    这位 Martin Fowler article 提到了两者的区别:

    两种模式之间的重要区别在于如何将实现提供给应用程序类。使用服务定位器,应用程序类会通过给定位器的消息明确地请求它。注入没有显式请求,服务出现在应用程序类中 - 因此控制反转。

    【讨论】:

    • 您使用的报价来自“服务定位器与依赖注入”。所以引用描述了依赖注入和服务位置之间的区别,但这并不能回答问题。问题是关于一个Container;一个可以进行依赖注入服务定位的工具。
    【解决方案2】:

    不,DI Container 本身并不是服务定位器,但它可以像一个服务定位器一样使用。这完全取决于它的用途。

    只要你使用Composition Root的Container里面,它就是not一个Service Locator。但是,一旦您在组合根外部使用容器,对容器的调用(或对它的抽象)将成为Service Locator anti-pattern 的一种形式。

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      相关资源
      最近更新 更多