我们有一个CDI项目使用:
在webapp的beans.xml
文件中,发现模式配置为推荐设置:bean-discovery-mode="annotated"
。尽管如此,我还是可以注入这个类,它没有用范围注释:
public class TestClass implements Serializable {
public String getDescription() {
return "This is a test class";
}
}
进入此ViewScoped
课程没有任何问题:
@ViewScoped
@Named
public class AuthenticationWebBean implements Serializable {
@Inject
private TestClass testClass;
我原以为这会抛出一个异常,或者将该字段保留为null。这里发生了什么,注入的Object
与注入的object
的范围是否相同?
提前致谢。
答案 0 :(得分:3)
您所描述的行为在CDI 1.1 / 1.2中,符合Java EE 7的容器将遵循它。
您使用的是TomEE 1.7.2,它符合Java EE 6 / CDI 1.0。它将在CDI 1.0的规则下运行,这使得一切都成为CDI组件。
TomEE 7将开始展示您所描述的行为。
答案 1 :(得分:2)
TomEE通常仅支持Java EE 6,只有夜间版本支持Java EE 7. {J}仅支持Java EE 7.这意味着在TomEE中它很可能被忽略,然后所有bean都被考虑用于注入。如果要从注入中排除bean,请使用bean-discovery-mode="annotated"
对其进行注释。否则,bean将注入与注入的bean相同的范围。这相当于@Alternative
范围,这是默认范围。