如果我的bean被声明为@ApplicationScoped会发生什么,但它有一个公共字段?

时间:2017-02-23 13:38:31

标签: java java-ee

根据javadocs(http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/package-summary.html),如果bean有一个公共字段,它应该被归类为@Dependant。

在我们的代码库中,我们遇到的情况是bean既是@ApplicationScoped又是@Singleton,但它有公共字段。这个bean会被视为@Dependant还是仍然可以作为@ApplicationScoped工作,因为不会抛出任何错误?

感谢

1 个答案:

答案 0 :(得分:2)

您的容器似乎没有完全符合J2EE规范,这是一个无效的bean,容器应该阻止应用程序启动。我已经证实了Tomee 1.7.2的情况。

托管bean上不允许使用公共字段,因为容器无法代理它们。在将较低范围注入较高范围(例如@Request@Application)时,这一点至关重要。我怀疑你的容器允许这样做,因为它不需要代理@ApplicationScoped bean。

话虽如此,我建议您只需更改代码即可使其符合规范,即使您的容器不符合规定,否则在未来的升级/迁移后它可能会中断! / p>