我已经阅读了几本关于不同DI框架的书籍,我看到“reify”或“reified”(过去时)一词被抛出,但我无法牢牢掌握这实际意味着什么代码 - 明智的。
维基百科定义说明
使(抽象的东西)更具体或真实。
我还阅读了What do “reify” and “reification” mean in the context of (functional?) programming?,这在编程环境中确认了上述定义。
但我无法在头脑中了解这在代码中是如何应用的(在DI的背景下)。问题的原因是我试图通过查看一些HK2源代码来调试堆栈跟踪,并且我看到reified
之类的变量/方法和if (!reified)
之类的片段。
所以我想得到一个代码示例,说明什么时候
注意:虽然问题被标记为hk2和cdi,但我想这个问题可以由任何知识渊博的人回答,因为我认为这个词不是严格依赖于Java DI。我已经看过Ninject(一个C#框架)一书中使用的术语。
答案 0 :(得分:2)
在HK2中,术语 reify 具体是关于ActiveDescriptor是否已被分类加载。
HK2中的所有服务都有一个关联的ActiveDescriptor,其中包含有关该服务的信息。在与服务相关联的类被分类之前(例如服务合同和限定符,以字符串形式),可以获得有关服务的一些信息。有关服务的一些信息仅在服务被分类并然后进行分析(具体化)之后才知道。例如,然后可以检查限定符的匹配字段,并找到实际的注入点集。
在加载和分析类之前,ActiveDesctiptor被认为不是具体化。在加载并分析了类之后,ActiveDesctiptor被称为具体化。
因为HK2对启动时间这样的事情非常敏感,所以它倾向于尽可能地保持ActiveDesciptors 具体化,减少类加载器锁的负担