2010-01-31 80 views

回答

24

是的,他們應該是範圍singleton。 服務應該是無狀態的,因此它們不需要多於一個實例。

因此,在範圍singleton中定義它們將節省實例化和連接它們的時間。

singleton是Spring的默認範圍,所以只需保留bean定義的原樣,而不顯式指定scope屬性。

您可以閱讀更多關於示波器in the spring docs

+0

謝謝。我是Spring新手,我知道如何編寫單例類,但是如何使用Spring設置「單例範圍」? – oym 2010-01-31 19:36:12

+0

哦,我沒有看到你的評論關於它作爲默認範圍。你能向我解釋一下這個範圍是如何設置和配置的,以便我可以瞭解所有東西都是如何連接的?再次感謝。 – oym 2010-01-31 19:37:26

+0

我添加了鏈接到我的答案。 – Bozho 2010-01-31 19:40:10

2

如果你堅持使用singleton作用域的bean,Spring更容易使用。如果你喜歡,單身是它的「默認位置」。是的,它支持其他範圍(在XML文件中使用scope="xyz"),但它使事情變得更難以使用,並損害性能。

基本上,除非你有一個很好的理由否則,堅持單身。

1

你大多需要單身。 (Spring默認值。)單例必須是線程安全的,因爲並行請求將使用相同的單個實例。事實上,它們必須是完全無國籍的,因爲它可以在任何時候被破壞和重新創建。

如果您需要跟蹤bean內部的狀態(不應該,這應該在數據庫中或存儲在請求中),您將獲得相同類型bean的許多實例,內存使用量會增加與請求的數量,即單身人士,你仍然只有一個實例。

即使您將bean的範圍限定爲請求,它們仍然必須至少是線程安全的(請求來自同一瀏覽器)。

+0

春天的單身bean可以*不*創建和隨時銷燬,我不知道你從那裏得到了什麼(可能你把它們與EJB會話bean混淆了)。此外,Spring單例中的可變狀態絕對沒問題,你只需要知道在該共享狀態下可以完成哪些操作。 – skaffman 2010-01-31 21:30:52

相關問題