与ManagedProperty相比,Inject有什么期望

时间:2013-09-11 07:57:42

标签: jsf dependency-injection cdi jsf-2.2

我开始使用Inject代替ManagedProperty。我已经进行了一些测试,在其中一个测试中,我将一个ViewScoped bean(Bean1)注入到具有相同范围的另一个(Bean2)中:

@Inject
private Bean1 bean1;

Bean1有一个代表艺术家的变量item,艺术家有许多不同的字段,如:名字,专辑列表等。

在Bean2中,我需要访问Bean1中的项目:

Artist artist = bean1.getItem();

当我在该行设置断点以查看Bean1内的断点时,我可以看到变量item,但是当我展开item时,没有设置任何字段。

如果我尝试使用调试器进入getItem()方法,我收到此消息:

Thread http-listener-1(2) stopped at beans.Bean1$Proxy$_$$_WeldClientProxy.getItem - compiled without debug info.

使用调试器退一行,然后查看artist变量,所有字段都已设置为正确的值。怎么可能?在此之前都是空的。

Edit1 :如果我将Inject替换为ManagedProperty,请从javax.faces.view.ViewScoped更改为javax.faces.bean.ViewScoped并执行与调试相同的步骤,我可以看到item中的字段已设置。我也可以进入方法getItem()

1 个答案:

答案 0 :(得分:0)

如果您从@ManagedProperty切换到@Inject,您可能会忘记javax.faces.bean.*包中的所有注释。原因是你不能将JSF自己的依赖注入机制与CDI混合在一起,否则会导致意外行为。