天天看點

Spring 設值注入(set)和構造器注入的差別

        Spring種提供了2種常用的注入方式,set方法注入和構造函數注入。由于這2種注入方式很相似,都可以滿足我們的需求,是以在大多數情況下我們忽視了這2種注入方式的差別。下面讓我們看看這2種注入方式的特點。

目錄

​​一、設值注入(set)​​

​​二、構造器注入​​

​​三、總結​​

一、設值注入(set)

        我們先看看Spring在使用set方法注入時,是怎樣執行個體化一個Bean和Bean的合作者的:

Spring 設值注入(set)和構造器注入的差別

         在A中有一個setB方法用來接收B對象的執行個體。那麼Spring執行個體化A對象的過程如下:

Spring 設值注入(set)和構造器注入的差別

        在不考慮Bean的初始化方法和一些Spring回調的情況下,Spring首先去調用A對象的構造函數執行個體化A,然後查找A依賴的對象本例子中是B(合作者)。一但找到合作者,Spring就會調用合作者(B)的構造函數執行個體化B。如果B還有依賴的對象Spring會把B上依賴的所有對象都按照相同的機制執行個體化然後調用A對象的setB(B b)把b對象注入給A。

因為Spring調用一個對象的set方法注入前,這個對象必須先被執行個體化。是以在"使用set方法注入"的情況下Spring會首先調用對象的構造函數。 

二、構造器注入

我們在來看通過構造函數注入的過程:

三、總結