IOC容器是服务定位器模式的一个示例吗?

时间:2017-01-31 14:41:26

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

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

2 个答案:

答案 0 :(得分:2)

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

  

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

答案 1 :(得分:1)

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

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