CreationalContext:自定义 Bean 应该总是从其 create() 方法调用 push() 吗?



CDI规范部分说:

调用push()不需要实现Contextual[例如您的自定义Bean]。但是,对于某些 Bean 作用域,在实例化和注入之间调用push()有助于容器最大程度地减少客户端代理对象的使用(否则需要客户端代理对象才能允许循环依赖关系)。

长期以来,我一直在为现实世界的收获而苦苦挣扎。

如果我正在编写一个可移植扩展,并且在这样做时以编程方式将Bean实例添加到容器中,那么始终从Beancreate(CreationalContext)方法中调用creationalContext.push(this)是否有任何危害? "某些豆子范围"的含义是否有现实世界的翻译?

我正在寻找类似"如果你的Bean要在Frobnicator范围内,那么不要费心打电话给push(),但如果它会在Fizzbuzz范围内,那么你总是想这样做"。 显然,我也想了解这种建议背后的原因。

这可能是一个值得在CDI-dev邮件列表中提出的问题,包括实际答案和规范澄清请求。

正如您自己发现的那样,它的文档记录很差,因此我在这里声称的任何内容我都无法通过引用规范来支持,因此请持保留态度。

据我回忆,这主要用于注入中的循环依赖关系。如果你不这样做,那么你可以安全地忽略它。此外,Weld 为您解决了经典的循环注射问题,因此这仅与@Produces真正相关,也许也与@PostConstruct相关。

这样做的全部目的是在上下文中存储"部分创建"的实例,以满足分辨率并继续创建循环依赖的 bean。

最新更新