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

Java 如果我的bean声明为@ApplicationScoped,但它有一个公共字段,会发生什么?,java,jakarta-ee,Java,Jakarta Ee,根据javadocs()的说法,如果一个bean有一个公共字段,那么它应该被分类为@dependent 在我们的代码库中,有一种情况,bean既是@ApplicationScoped又是@Singleton,但它有公共字段。这个bean将被视为@dependent,还是因为没有抛出错误而仍然作为@ApplicationScoped工作 谢谢您的容器似乎没有完全符合J2EE规范,这是一个无效的bean,容器应该阻止应用程序启动。我已经证实了Tomee 1.7.2的情况 托管bean上不允许使用公共

根据javadocs()的说法,如果一个bean有一个公共字段,那么它应该被分类为@dependent

在我们的代码库中,有一种情况,bean既是@ApplicationScoped又是@Singleton,但它有公共字段。这个bean将被视为@dependent,还是因为没有抛出错误而仍然作为@ApplicationScoped工作


谢谢

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

托管bean上不允许使用公共字段,因为容器无法代理它们。当涉及到将较低的作用域注入较高的作用域时(例如,将
@Request
注入
@Application
)。我怀疑您的容器允许这样做,因为它不需要代理
@ApplicationScoped
bean


也就是说,我建议您只需更改代码,使其符合规范,即使您的容器不符合规范,否则在将来的升级/迁移后,它可能会崩溃

我们使用weblogic作为容器。如果它真的失败了,而不是在你不知道它是如何处理错误的情况下运行,那就太好了。