【发布时间】:2017-06-17 01:13:34
【问题描述】:
Container 允许我们为类提供所需的依赖项。如果容器已知该类,它可以创建任何 bean。是服务定位器的例子吗?
【问题讨论】:
标签: java spring inversion-of-control service-locator
Container 允许我们为类提供所需的依赖项。如果容器已知该类,它可以创建任何 bean。是服务定位器的例子吗?
【问题讨论】:
标签: java spring inversion-of-control service-locator
这位 Martin Fowler article 提到了两者的区别:
两种模式之间的重要区别在于如何将实现提供给应用程序类。使用服务定位器,应用程序类会通过给定位器的消息明确地请求它。注入没有显式请求,服务出现在应用程序类中 - 因此控制反转。
【讨论】:
不,DI Container 本身并不是服务定位器,但它可以像一个服务定位器一样使用。这完全取决于它的用途。
只要你使用Composition Root的Container里面,它就是not一个Service Locator。但是,一旦您在组合根外部使用容器,对容器的调用(或对它的抽象)将成为Service Locator anti-pattern 的一种形式。
【讨论】: