gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:56:38 25 4
gpt4 key购买 nike

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

最佳答案

DIPP&P定义 Service Locator anti-pattern如下:

A Service Locator supplies application components outside the Composition Root with access to an unbounded set of Volatile Dependencies.

让我们提炼一下这个定义:

  • 应用程序组件是带有代码和注入(inject)依赖项的类
  • Composition Root 是“应用程序中模块组合在一起的唯一位置。”
  • unbounded set 表示 API 不限制返回的不同类型的数量。通常,您会有一个 API,例如 object Resolve(Type),并且因为您可以请求任何类型,所以我们称该集合为“无界”。将其与 API 返回的“有界”集进行比较,例如:IController Create(Type)
  • Volatile Dependencies 是我们隐藏在抽象背后并注入(inject)其消费者的依赖类型。 volatile 依赖项是 DI 的焦点,也是我们实行松散耦合的原因。

DI 容器最符合定义,因为它允许通过其 object Resolve(Type)(或类似的)API 访问“无限集”的依赖项。但是,DI 容器本身不是服务定位器。它是否表现得像一个取决于决定因素,即它是在“组合根之外”使用的。换句话说:当 Composition Root 中使用时,它是一个基础结构组件;当在组合根之外使用时,它变成服务定位器。

或者,在 the words 中马克西曼:

Service Locator is ultimately not identified by the mechanics of its API, but by the role it plays.

关于java - IOC 容器是服务定位器模式的一个例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com