在依赖注入的背景下,“reify”到底是什么意思

时间:2015-09-03 04:07:22

标签: dependency-injection cdi hk2

我已经阅读了几本关于不同DI框架的书籍,我看到“reify”或“reified”(过去时)一词被抛出,但我无法牢牢掌握这实际意味着什么代码 - 明智的。

维基百科定义说明

  

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

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

但我无法在头脑中了解这在代码中是如何应用的(在DI的背景下)。问题的原因是我试图通过查看一些HK2源代码来调试堆栈跟踪,并且我看到reified之类的变量/方法和if (!reified)之类的片段。

所以我想得到一个代码示例,说明什么时候

注意:虽然问题被标记为,但我想这个问题可以由任何知识渊博的人回答,因为我认为这个词不是严格依赖于Java DI。我已经看过Ninject(一个C#框架)一书中使用的术语。

1 个答案:

答案 0 :(得分:2)

在HK2中,术语 reify 具体是关于ActiveDescriptor是否已被分类加载。

HK2中的所有服务都有一个关联的ActiveDescriptor,其中包含有关该服务的信息。在与服务相关联的类被分类之前(例如服务合同和限定符,以字符串形式),可以获得有关服务的一些信息。有关服务的一些信息仅在服务被分类并然后进行分析(具体化)之后才知道。例如,然后可以检查限定符的匹配字段,并找到实际的注入点集。

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

因为HK2对启动时间这样的事情非常敏感,所以它倾向于尽可能地保持ActiveDesciptors 具体化,减少类加载器锁的负担