2017-02-23 22 views
2

根據javadocs(http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/package-summary.html)如果一個bean有一個公共字段,它應該被歸類爲@Dependant。如果我的bean被聲明@ApplicationScoped,但它有一個公共字段會發生什麼?

在我們的代碼庫中,我們有一種情況,即一個bean既是@ApplicationScoped又是@Singleton,但它具有公共字段。將這個bean作爲@Dependant對待,還是將它作爲@ApplicationScoped工作,因爲沒有錯誤發生?

感謝

回答

2

看來,您的容器沒有完全與J2EE規範遵守,這是一個無效的bean和容器應防止應用程序無法啓動。我已經證實Tomee 1.7.2就是這種情況。

託管bean上不允許使用公共字段,因爲容器無法代理它們。這對於向較高範圍注入較低範圍(例如@Request@Application)至關重要。我懷疑你的容器是允許的,因爲它不需要代理@ApplicationScoped豆。這就是說,我建議你只是改變你的代碼,使其符合規範,即使你的容器不是,否則它可能會在未來的升級/遷移後中斷!

+0

我們使用weblogic作爲我們的容器。如果它實際上失敗了,而不是與你一起運行,而不知道它是如何處理錯誤,那將是非常好的。 – codemonkey

相關問題