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

时间:2018-05-06 17:22:14

标签: java cdi

CDI specification says, in part

  

Contextual的实施[例如]您的自定义Bean]无需致电push()。但是,对于某些bean作用域,在实例化和注入之间调用push()有助于容器最小化客户端代理对象的使用(否则将需要允许循环依赖)。

我长期以来一直在努力解决现实世界的问题。

如果我正在编写可移植扩展程序​​,并且在执行此操作时,我会以编程方式将Bean个实例添加到容器中,是否会执行任何损害以始终从creationalContext.push(this)调用Beanmy Bean's create(CreationalContext) method内?是否存在“某些bean范围”意味着什么的真实翻译?

我正在寻找类似“如果你的Frobnicator将在push()范围内,那么就不要打电话给Fizzbuzz,但是如果它会在https://apinsta.herokuapp.com/u/USERNAME 范围,然后你总是想这样做“。显然,我也想了解这些建议背后的原因。

1 个答案:

答案 0 :(得分:0)

这可能是值得问CDI-dev mailing list的问题,实际答案和规范中的澄清请求。

正如你自己想象的那样,它的记录很少,所以我在这里要求的任何东西都不能通过引用规范来支持,所以请用一点点盐。 < / p>

据我所知,这主要用于注射中的循环依赖。如果你不这样做,那么你可以放心地忽略它。此外,Weld为您解决了经典的循环注入问题,因此这仅适用于@Produces可能 @PostConstruct

这样做的目的是存储一个&#34;部分创建的&#34;上下文中的实例,以满足分辨率并继续创建循环依赖的bean。