1

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

维基百科定义状态

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

我还阅读了在(函数式?)编程的上下文中“具体化”和“具体化”是什么意思?,哪种在编程上下文中确认了上述定义。

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

所以我想得到一个代码示例,说明什么时候没有具体化,什么时候/如何具体化,也许更好地解释上述定义如何在 DI 的上下文中应用。

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

4

1 回答 1

3

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

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

在加载和分析类之前, ActiveDesctiptor被认为是不被具体化的。在类被加载和分析之后, ActiveDesctiptor 被称为reified

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

于 2015-09-03T11:58:48.240 回答