2013-04-01 49 views
0

我正在重新構建使用Spring的遺留Java應用程序。如何確保一個類只能被Spring實例化?

這包括聲明應用程序類爲Spring beans,然後用context.getBeanDI替換所有出現的new

我正在重寫應用程序邏輯,使某些類成爲單身人士。但是,由於它們在其他位置使用新的實例化,因此會存在多個副本,這會混淆業務邏輯。 我想確保應用程序在嘗試自行實例化對象時顯式失敗,而不是以不可預知的方式運行和行爲不當。 (我不確定重新分解已經覆蓋了應用程序的100%,但仍然有可能在某個角落潛伏着新的東西)

確保只能通過Spring容器實例化類的最佳方法是什麼? (我希望能避免編寫爲每個類工廠)

+1

你們班是單身人士嗎? – partlov

+0

在「應用程序嘗試自行實例化對象時顯式失敗,而不是以不可預知的方式運行和行爲不當」的情況下,儘管彈簧DI容器管理您的對象生命週期,但在urs系統內跟蹤兩個以上的實例的類是不可能的。當對象在彈簧DI的範圍之外創建時,您必須手動管理它。 –

回答

4

由於從你的問題

在此特定情形只有一個對象的一個​​副本應該存在是從上下文,多個副本獲取會弄亂業務邏輯。

你可以創造經典的單身和使用getInstance()方法,在bean定義工廠方法在春天的xml文件:

<bean id="myBean" class="MyClass" factory-method="getInstance"/> 

讓你的構造私有的,不是誰都可以調用它。此外,如果舊代碼的某些部分使用new實例化您的類,則會在編譯時看到錯誤。

相關問題