1. 程式人生 > >Spring提前載入與懶載入

Spring提前載入與懶載入

首先,Spring預設是提前載入,這意味著當專案啟動,spring初始化,spring會把所有的掃描包下的 ,所有帶spring 註解(@Component、@Repository、@Service、@Controller)的類都初始化

注意:當初始化時,會呼叫預設構造方法,即一個空的構造方法,但當在類中加入非空構造方法,spring會報錯誤,顯示找不到合適的構造方法

 

當spring建立bean時,設定default-lazy-init="true",即懶載入時,spring不會主動初始化帶註解的類。

這裡有幾個特殊情況值得注意:

1、由於在controller中會注入service層的類,由於,controller層面上的spring-mvc不是懶載入,即當在controller中注入service時,就會初始化此service類

。因此即呼叫到誰初始化誰

2、如果一個bean被設定為延遲初始化,而另一個非延遲初始化的singleton bean依賴於它,那麼當ApplicationContext提前例項化singleton bean時,它必須也確保所有上述singleton 依賴bean也被預先初始化,當然也包括設定為延遲例項化的bean,即被非懶載入的bean依賴時也會被初始化

 

提前載入的一個好處是能即刻發現錯誤:

ApplicationContext實現的預設行為就是在啟動時將所有singleton bean提前進行例項化。提前例項化意味著作為初始化過程的一部分,ApplicationContext例項會建立並配置所有的singleton bean。通常情況下這是件好事

,因為這樣在配置中的任何錯誤就會即刻被發現(否則的話可能要花幾個小時甚至幾天)。

 

懶載入與提前載入對比:
懶載入:物件使用的時候才去建立。節省資源,但是不利於提前發現錯誤;

提前載入:容器啟動時立馬建立。消耗資源,但有利於提前發現錯誤。