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. mysqli_fetch_object時創建新的對象實例
- 3. 創建對象實例
- 4. 如何創建對象的實例?
- 5. Spring使用new創建對象時注入的bean null,如何解決它?
- 6. Unity依賴注入 - 如何在運行時創建要注入的實例
- 7. 彈簧注入和對象實例化
- 8. 依賴注入創建多個實例
- 9. Spring創建單例的多個實例?
- 10. Java創建地圖對象的實例
- 11. 創建新的實例對象
- 12. Java創建深空對象的實例
- 13. 的Flex對象創建一倍實例
- 14. 如何在Spring中將依賴注入到自實例化的對象中?
- 15. 如何基於對象名稱創建javascript對象的實例
- 16. Spring運行時對象/ bean的創建
- 17. 如何創建註釋的實例
- 18. 在實例對象中創建JFrame
- 19. 使用新詞創建對象實例
- 20. Java對象實例創建問題
- 21. 全局創建對象實例
- 22. Asp.net MVC4,C#創建對象實例
- 23. 如何在創建對象時初始化實例
- 24. 如何停止創建對象實例時,它不需要
- 25. 對象創建後注入屬性
- 26. 何時創建ApiController實例?
- 27. 注入與杜松子酒創建實例創建GWT.create
- 28. Spring @Autowired註釋。如何在db中創建與對象相關的對象?
- 29. Spring依賴注入:注入接口的所有實例
- 30. 如何監視Spring對象的創建?
你是對的!非單身bean不會立即創建。 +1 – nanda 2010-01-18 08:19:15
謝謝skaffman,這澄清了我的疑問。因此,程序員要決定是否需要對bean進行懶惰初始化或初始化。 這可能是非常主觀的,但是你能否讓我知道在這種情況下遵循的任何最佳實踐。 – 2010-01-18 09:11:17
這完全是主觀的,是的,但其餘的軟件構建也是如此。這也不例外。但是你的默認位置應該是非懶惰的,並且是默認的範圍。如果你有一個非常好的理由,那麼只能做一個豆。 – skaffman 2010-01-18 09:46:04