我开始使用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()
。
答案 0 :(得分:0)
如果您从@ManagedProperty
切换到@Inject
,您可能会忘记javax.faces.bean.*
包中的所有注释。原因是你不能将JSF自己的依赖注入机制与CDI混合在一起,否则会导致意外行为。