繁体   English   中英

CDI注入无范围的咖啡豆

[英]CDI injection of beans with no scope

我们有一个使用以下内容的CDI项目:

  • Tomee容器
  • 适用于CDI的Apache OpenWebBeans
  • Deltaspike CDI扩展

在webapp的beans.xml文件中,发现模式配置为建议的设置: bean-discovery-mode="annotated" 尽管如此,我仍然可以注入此类,但未使用范围进行注释:

public class TestClass implements Serializable {
    public String getDescription() {
        return "This is a test class";
    }
}

ViewScoped进入此ViewScoped类:

@ViewScoped
@Named
public class AuthenticationWebBean implements Serializable {

    @Inject
    private TestClass testClass;

我希望这会引发异常,或者将字段保留为null。 正在发生的事情在这里,并且将注入的Object采取同样的范围作为object它注入?

提前致谢。

您描述的行为在CDI 1.1 / 1.2中,遵循Java EE 7的容器将遵循它。

您正在使用兼容Java EE 6 / CDI 1.0的TomEE 1.7.2。 它将在CDI 1.0的规则下运行,该规则使所有内容都成为CDI组件。

TomEE 7将开始演示您正在描述的行为。

TomEE通常仅支持Java EE 6,只有夜间构建支持Java EE7。Java EE 7仅支持bean-discovery-mode="annotated" 。这意味着在TomEE中,它很可能被忽略,然后考虑将所有bean用于注射。 如果要从注入中排除bean,请使用@Alternative对其进行@Alternative 否则,将以与注入bean相同的作用域注入bean。 这等效于@Dependent范围,这是默认设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM