我在使用無狀態EJB時遇到了一個問題。我希望在該EJB中使用特定的靜態方法,但此方法非常重要,並且具有靜態依賴性。使用相同靜態方法的多個無狀態Bean
正如我們所知,無狀態會話bean的實例是根據需求(一個或多個)創建的。那麼如何確保所有的EJB都使用該靜態方法的單個副本。我不確定,但我認爲每個使用靜態方法的不同類都會加載不同的類副本,然後執行不同的靜態方法副本。
而且我不能依靠singleton EJB,因爲它不能保證只有一個副本會保留,因爲如果服務器需要多個JVM。單身EJB的不同副本將存在於不同的JVM中。
在此先感謝。
我想知道爲什麼它說他們「不能是靜態的」。誰在乎它們是否是靜態的?即使在標準的Java中,靜態方法也是一種黑羊:程序化,而不是面向對象,放置它們並不重要。程序員將靜態方法組織到類中,但由於它們不對對象狀態進行操作,所以選擇有些隨意。 – DavidS
我最近得知「它們不能是靜態的」,因爲靜態方法不參與容器管理事務,AOP,安全性等。如果我們接着問「爲什麼靜態方法不參與AOP等等」我認爲這與EJB/CDI如何使用代理完成其工作有關:代理常常通過實現接口或擴展類來實現,而這些類不能用於靜態方法(類似於[Mockito])(https://stackoverflow.com/問題/ 4482315 /爲什麼此結果的Mockito - 不模擬靜態方法))。 – DavidS