"reify" 在依赖注入的上下文中到底意味着什么
What exactly does "reify" mean in the context of dependency injection
我读过几本关于不同 DI 框架的书,我看到术语 "reify" 或 "reified" (过去时),但我无法牢牢掌握这实际上意味着什么代码。
维基百科定义指出
make (something abstract) more concrete or real.
我也读过 What do “reify” and “reification” mean in the context of (functional?) programming?,这在编程上下文中证实了上述定义。
但我脑子里想不出这在代码中是如何应用的(在 DI 的上下文中)。这个问题的原因是我试图通过查看一些 HK2 源代码来调试堆栈跟踪,我看到 variables/methods 例如 reified
和片段 if (!reified)
.
所以我想得到一个代码示例,说明什么时候不是具体化而when/how它变得具体化,也许对上面的内容有更好的解释定义适用于 DI。
注意:虽然问题被标记为 hk2 and cdi,但我想这个问题可以由任何了解 DI 的人回答,因为我不认为这个词是严格绑定到 Java DI。我在一本关于 Ninject(C# 框架)的书中看到过这个术语。
在 HK2 中,术语 reify 专门针对 ActiveDescriptor 是否已被 class 加载。
HK2 中的所有服务都有一个关联的 ActiveDescriptor,其中包含有关该服务的信息。在 class 加载与服务关联的 class 之前,有关服务的某些信息可用(例如字符串形式的服务合同和限定符)。有关服务的一些信息只有在服务被 class 加载然后分析 ( 化 之后才知道。例如,然后可以检查限定符的匹配字段,并可以找到实际的注入点集。
在 class 被加载和分析之前,据说 ActiveDestiptor 未被 具体化 。在 class 被加载和分析后,ActiveDestiptor 被认为是 reified。
因为 HK2 对启动时间之类的事情非常敏感,所以它倾向于尽可能长时间地保持 ActiveDesciptors NOT reified,从而减轻 class装载机锁
我读过几本关于不同 DI 框架的书,我看到术语 "reify" 或 "reified" (过去时),但我无法牢牢掌握这实际上意味着什么代码。
维基百科定义指出
make (something abstract) more concrete or real.
我也读过 What do “reify” and “reification” mean in the context of (functional?) programming?,这在编程上下文中证实了上述定义。
但我脑子里想不出这在代码中是如何应用的(在 DI 的上下文中)。这个问题的原因是我试图通过查看一些 HK2 源代码来调试堆栈跟踪,我看到 variables/methods 例如 reified
和片段 if (!reified)
.
所以我想得到一个代码示例,说明什么时候不是具体化而when/how它变得具体化,也许对上面的内容有更好的解释定义适用于 DI。
注意:虽然问题被标记为 hk2 and cdi,但我想这个问题可以由任何了解 DI 的人回答,因为我不认为这个词是严格绑定到 Java DI。我在一本关于 Ninject(C# 框架)的书中看到过这个术语。
在 HK2 中,术语 reify 专门针对 ActiveDescriptor 是否已被 class 加载。
HK2 中的所有服务都有一个关联的 ActiveDescriptor,其中包含有关该服务的信息。在 class 加载与服务关联的 class 之前,有关服务的某些信息可用(例如字符串形式的服务合同和限定符)。有关服务的一些信息只有在服务被 class 加载然后分析 ( 化 之后才知道。例如,然后可以检查限定符的匹配字段,并可以找到实际的注入点集。
在 class 被加载和分析之前,据说 ActiveDestiptor 未被 具体化 。在 class 被加载和分析后,ActiveDestiptor 被认为是 reified。
因为 HK2 对启动时间之类的事情非常敏感,所以它倾向于尽可能长时间地保持 ActiveDesciptors NOT reified,从而减轻 class装载机锁