CDI:获取null而不是新实例

时间:2012-04-25 12:12:41

标签: java-ee jsf-2 cdi jboss-weld

我仍然不是100%清楚这一点,但对我来说是如此。

我相信如果您使用ApplicationScope注入一个bean并且它从未被实例化,CDI将为您提供null。

但是,如果您创建一个新实例,然后尝试在稍后注入它,则可以正常工作,从那时起它将继续正常工作。

在JSF依赖注入中,你永远不必创建它一次。我相信JSF会做类似

的事情
//pseudo code
AtStartUp () {
if (applicationScoped)
create new Instance();

或可能

AtInjectionPoint () {
if (applicationScoped && null)
return new Instance();

else return Instance;

虽然我相信CDI会像

那样
AtInjectionPoint () {
return Instance;
你能跟我来吗?我的问题基本上是我们拥有的每个applicationcoped bean都是null,除非我们创建它一次。我们非常希望CDI以某种方式处理它,并且表现得像前两个伪代码示例之一......

有没有人对此有更多了解?似乎很难找到有关此事的信息。

1 个答案:

答案 0 :(得分:2)

第一次引用时,容器会自动创建CDI bean。无需自己实例化。

我不确定你为何会遇到这种行为。也许你正在将jsf托管bean注释与CDI注释混合在一起?或者您试图在构造函数中访问注入的bean?