2

學生取決於階級結果爲什麼範圍在春季會影響類的裝載在春季

<bean id = "result" lazy-init = "false"> 
</bean> 
<bean id = "student" lazy-init = "true"> 
</bean> 

結果:結果豆將在容器啓動時加載當我們調用getBean方法時,將加載學生

<bean id = "result" lazy-init = "false" scope = "prototype"> 
</bean> 
<bean id = "student" lazy-init = "true" scope = "Singleton"> 
</bean> 

結果:沒有豆將在集裝箱被裝載啓動。

問題:爲什麼範圍影響類負載;範圍與課程加載時間有什麼關係?

回答

2

根據documentation

非單身,在每一個爲特定 豆的請求時的時間 創建一個新的bean實例的豆部署結果的原型範圍。 也就是說,這個bean被注入到另一個bean中,或者你通過容器上的getBean()方法調用來請求它。作爲 規則,使用所有有狀態bean的原型範圍和無狀態bean的單例範圍 。

由於您尚未撥打getBean或將其注入另一個bean,因此尚未創建此bean。

順便說一句,即使你宣佈你singletone bean作爲lazy-init="true",它將被創建,如果你將它注入(例如使用@Autowired註釋),以其他非懶豆腐。

0

作用域singleton的bean是一個bean,每個應用程序上下文創建一次。範圍爲prototype的bean是一個每次都實例化的bean。

換句話說,如果你有兩個類自動裝配一個singleton作用域bean,那麼這兩個類的所有實例都會引用同一個bean實例。自動裝配一個prototype作用域bean也會爲每個自動裝配的實例創建一個新的實例。

lazy-init的屬性定義當bean被實例化:作爲prototype作用域每個有如果在使用它的屬性被設置爲真或假,因爲bean被實例化沒有差別時間bean被實例化(或者通過被自動裝配或通過程序從上下文中檢索)。對於singleton作用域的bean但它確實有差別:

  • 如果lazy-init設置爲false(這是默認值),豆上實例啓動。
  • 如果該屬性設置爲true,則該bean將在首次使用時(通過自動裝配或通過上下文進行程序化檢索)實例化。

定義延遲加載singleton的bean可以派上用場的情況下,豆可能是昂貴的創建,並且只能在特殊情況下使用,則該應用實際上可能沒有以往任何時候都調用該bean的任何方法運行。

查看Spring IoC container documentation,詳細瞭解詳情。