Spring會創建對象並創建對象,以便您的程序不必擔心創建對象。 但是這裏的問題是創建了注入對象的實例。是在主程序使用實例時還是在創建主程序實例時?Spring何時創建注入對象的實例
回答
在上下文啓動時,上下文中的所有bean都被實例化,注入和初始化。在從上下文中檢索到第一個bean的時候,所有的bean都可以使用了。
有兩兩件事,可以防止一個bean在上下文初始化啓動:
- 甲Bean有豆配置成與different scope(如
prototype
,request
或session
),使用scope="xyz"
屬性 - 一個bean被標記爲
lazy-init="true"
,在這種情況下,它只會在明確要求時才實例化,或者它是否需要作爲其他bean的依賴項來實例化。
默認情況下,ApplicationContext實現急切地創建和配置所有的singleton bean作爲初始化過程的一部分。通常,這種預先實例化是可取的,因爲配置或周圍環境中的錯誤是立即發現的,而不是幾小時甚至幾天後。當這種行爲不可取時,可以通過將bean定義標記爲lazy-initialized來防止單例bean的預先實例化。一個惰性初始化bean告訴IoC容器在第一次請求時創建一個bean實例,而不是在啓動時。
在評論中,OP寫道:
因此,它是由程序員來決定一個bean是否需要延遲初始化或初始化前期。這可能是非常主觀的,但是你能否讓我知道在這種情況下所遵循的最佳做法。
是的,由程序員(或系統集成商)來決定。
確定沒有任何「最佳實踐」規則。想想這樣說:
如果聲明爲延遲初始化時,它總是需要被實例化一個bean,你將有可能成爲啓動過程比較慢。
如果您在非常需要的情況下將bean聲明爲已急切初始化,則會使啓動過程變慢,並且可能使用更多的內存。在最壞的情況下,創建不必要的bean甚至可能導致啓動失敗。
總之,您需要了解您的應用程序。
+1讚賞建議「簡而言之,您需要了解您的申請。」 – asgs 2012-04-24 23:28:43
- 1. 創建對象實例
- 2. 如何創建對象的實例?
- 3. Spring使用new創建對象時注入的bean null,如何解決它?
- 4. 彈簧注入和對象實例化
- 5. 依賴注入創建多個實例
- 6. Spring創建單例的多個實例?
- 7. Java創建地圖對象的實例
- 8. 創建新的實例對象
- 9. 的Flex對象創建一倍實例
- 10. 如何在Spring中將依賴注入到自實例化的對象中?
- 11. Spring運行時對象/ bean的創建
- 12. 如何創建註釋的實例
- 13. 在實例對象中創建JFrame
- 14. 全局創建對象實例
- 15. Asp.net MVC4,C#創建對象實例
- 16. Spring依賴注入:注入接口的所有實例
- 17. 如何監視Spring對象的創建?
- 18. Google guice注入一個由Spring創建的實例和方法攔截
- 19. 當需要多個新對象實例時,如何實現依賴注入?
- 20. 如何使用Autofac注入同一對象的兩個實例?
- 21. 新陣列(_)填充(對象)不創建對象的新實例
- 22. 的Java:創建時括號類名稱對象實例
- 23. 創建和Python的實例化對象時運行
- 24. 在按鈕按下時創建一個對象的新實例
- 25. 當本地和實例對象創建時出現的StackOverflowError
- 26. 接口的Spring bean注入對象
- 27. 什麼時候創建第一個Python對象的「對象」和「類型」實例?
- 28. 我想知道,Spring依賴注入創建單例對象嗎?如果是的話,它如何管理內部?
- 29. 我如何獲得在php中創建另一個對象實例的實例?
- 30. 如何從動態創建的類獲取對象的實例
你是對的!非單身bean不會立即創建。 +1 – nanda 2010-01-18 08:19:15
謝謝skaffman,這澄清了我的疑問。因此,程序員要決定是否需要對bean進行懶惰初始化或初始化。 這可能是非常主觀的,但是你能否讓我知道在這種情況下遵循的任何最佳實踐。 – 2010-01-18 09:11:17
這完全是主觀的,是的,但其餘的軟件構建也是如此。這也不例外。但是你的默認位置應該是非懶惰的,並且是默認的範圍。如果你有一個非常好的理由,那麼只能做一個豆。 – skaffman 2010-01-18 09:46:04