2010-01-18 45 views

回答

12

在上下文啓動時,上下文中的所有bean都被實例化,注入和初始化。在從上下文中檢索到第一個bean的時候,所有的bean都可以使用了。

有兩兩件事,可以防止一個bean在上下文初始化啓動:

  • 甲Bean有豆配置成與different scope(如prototyperequestsession),使用scope="xyz"屬性
  • 一個bean被標記爲lazy-init="true",在這種情況下,它只會在明確要求時才實例化,或者它是否需要作爲其他bean的依賴項來實例化。
+3

你是對的!非單身bean不會立即創建。 +1 – nanda 2010-01-18 08:19:15

+0

謝謝skaffman,這澄清了我的疑問。因此,程序員要決定是否需要對bean進行懶惰初始化或初始化。 這可能是非常主觀的,但是你能否讓我知道在這種情況下遵循的任何最佳實踐。 – 2010-01-18 09:11:17

+0

這完全是主觀的,是的,但其餘的軟件構建也是如此。這也不例外。但是你的默認位置應該是非懶惰的,並且是默認的範圍。如果你有一個非常好的理由,那麼只能做一個豆。 – skaffman 2010-01-18 09:46:04

2

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-lazy-init

默認情況下,ApplicationContext實現急切地創建和配置所有的singleton bean作爲初始化過程的一部分。通常,這種預先實例化是可取的,因爲配置或周圍環境中的錯誤是立即發現的,而不是幾小時甚至幾天後。當這種行爲不可取時,可以通過將bean定義標記爲lazy-initialized來防止單例bean的預先實例化。一個惰性初始化bean告訴IoC容器在第一次請求時創建一個bean實例,而不是在啓動時。

4

在評論中,OP寫道:

因此,它是由程序員來決定一個bean是否需要延遲初始化或初始化前期。這可能是非常主觀的,但是你能否讓我知道在這種情況下所遵循的最佳做法。

是的,由程序員(或系統集成商)來決定。

確定沒有任何「最佳實踐」規則。想想這樣說:

  • 如果聲明爲延遲初始化時,它總是需要被實例化一個bean,你將有可能成爲啓動過程比較慢。

  • 如果您在非常需要的情況下將bean聲明爲已急切初始化,則會使啓動過程變慢,並且可能使用更多的內存。在最壞的情況下,創建不必要的bean甚至可能導致啓動失敗。

總之,您需要了解您的應用程序。

+0

+1讚賞建議「簡而言之,您需要了解您的申請。」 – asgs 2012-04-24 23:28:43

相關問題