【问题标题】:What exactly does "reify" mean in the context of dependency injection在依赖注入的上下文中,“reify”到底是什么意思
【发布时间】:2015-11-28 18:23:26
【问题描述】:

我已经阅读了几本关于不同 DI 框架的书籍,并且看到了“reify”或“reified”(过去时)这个术语,但我无法牢牢掌握代码的实际含义——明智的。

维基百科的定义说明

使(抽象的)更具体或更真实。

我还阅读了What do “reify” and “reification” mean in the context of (functional?) programming?,这在编程上下文中证实了上述定义。

但我无法想象这在代码中是如何应用的(在 DI 的上下文中)。问题的原因是我试图通过查看一些 HK2 源代码来调试堆栈跟踪,我看到变量/方法如 reified 和 sn-ps 如 if (!reified)

所以我想获得一个代码示例,说明什么时候没有具体化以及什么时候/如何具体化,并且可能更好地解释上述定义如何在 DI 的上下文中应用.

注意:虽然这个问题被标记为 ,但我想任何了解 DI 的人都可以回答这个问题,因为我不认为这个术语与Java DI。我在一本关于 Ninject(一个 C# 框架)的书中看到了这个术语。

【问题讨论】:

  • 正如this clojure site 所说,“我们使用 reify 来创建符合特定协议(或 Java 接口)的对象实例”。所以这可能意味着在运行时创建一个具体的对象作为依赖。

标签: hk2 cdi dependency-injection cdi hk2


【解决方案1】:

在 HK2 中,术语 reify 专门表示 ActiveDescriptor 是否已被类加载。

HK2 中的所有服务都有一个关联的 ActiveDescriptor,其中包含有关该服务的信息。在与服务关联的类被类加载之前,一些关于服务的信息是可用的(例如服务契约和限定符,以字符串形式)。关于服务的一些信息只有在服务被类加载然后分析(reified)之后才知道。例如,然后可以检查限定符的匹配字段,并可以找到实际的注入点集。

在类被加载和分析之前,ActiveDesctiptor 被称为没有被具体化。在类被加载并分析之后,ActiveDesctiptor 被称为被具体化。

因为 HK2 对诸如启动时间之类的事情非常敏感,它倾向于尽可能长时间地保持 ActiveDeciptors NOT reified,从而减轻类加载器锁的负担

【讨论】:

    猜你喜欢
    • 2020-12-04
    • 2022-10-23
    • 2014-11-14
    • 2017-08-28
    • 2018-04-10
    • 2013-10-12
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多