使用 @autowired 註解進行裝配,只能是根據型別進行匹配。@autowired 註解可以用於 setter 方法、建構函式、字段,甚至普通方法,前提是方法必須有至少乙個引數。@autowired 可以用於陣列和使用泛型的集合型別。然後 spring 會將容器中所有型別符合的 bean 注入進來。@autowired 標註作用於 map 型別時,如果 map 的 key 為 string 型別,則 spring 會將容器中所有型別符合 map 的 value 對應的型別的 bean 增加進來,用 bean 的 id 或 name 作為 map 的 key。
@autowired 標註作用於普通方法時,會產生乙個***,就是在容器初始化該 bean 例項的時候就會呼叫該方法。當然,前提是執行了自動裝配,對於不滿足裝配條件的情況,該方法也不會被執行。
當標註了 @autowired 後,自動注入不能滿足,則會丟擲異常。我們可以給 @autowired 標註增加乙個 required=false 屬性,以改變這個行為。另外,每乙個類中只能有乙個建構函式的 @autowired.required() 屬性為 true。否則就出問題了。如果用 @autowired 同時標註了多個建構函式,那麼,spring 將採用貪心演算法匹配建構函式 ( 建構函式最長 )。
@autowired(required=false)@qualifier 甚至可以作用於方法的引數 ( 對於方法只有乙個引數的情況,我們可以將 @qualifer 標註放置在方法宣告上面,但是推薦放置在引數前面 ),舉例如下:@qualifier("ppp")
public void setperson(person p){}
@autowired(required=false)public void sayhello(@qualifier("ppp")person p,string name){}
我們可以在配置檔案中指定某個 bean 的 qualifier 名字,方法如下:
"person" class="footmark.spring.person">
"ppp"/>
如果沒有明確指定 bean 的 qualifier 名字,那麼預設名字就是 bean 的名字。通常,qualifier 應該是有業務含義的,例如 "domain","persistent" 等,而不應該是類似 "person" 方式。
我們還可以將 @qualifier 標註在集合型別上,那麼所有 qualifier 名字與指定值相同的 bean 都將被注入進來。
class="footmark.helloworld">type="moviequalifier">
key="format"
value="vhs"/>
key="genre"
value="comedy"/>
qualifier>
bean>
class="footmark.helloworld">
key="format"
value="***"/>
key="genre"
value="action"/>
bean>
@autowired 註解對應的後處理註冊與前面相似,只需在配置檔案中增加如下一行即可:
@autowired預設按型別裝配,預設情況下必須要求依賴物件必須存在,如果要允許null值,可以設定它的required屬性為false,例如:@autowired(required=false)
spring中autowire的用法
autowire模式就是在spring的宣告檔案裡用作進行物件間的關聯關係自動繫結的,就是在spring beanfactory內的乙個bean對其bean的引用可以自動進行,而不一定用ref 的方式顯式宣告。在reference的3.3.6節有詳細的介紹,autowire主要有5種模式 1 no ...
spring中autowire的用法
autowire模式就是在spring的宣告檔案裡用作進行物件間的關聯關係自動繫結的,就是在spring beanfactory內的乙個bean對其bean的引用可以自動進行,而不一定用ref 的方式顯式宣告。在reference的3.3.6節有詳細的介紹,autowire主要有5種模式 1 no ...
spring中autowire的用法
autowire模式就是在spring的宣告檔案裡用作進行物件間的關聯關係自動繫結的,就是在spring beanfactory內的乙個bean對其bean的引用可以自動進行,而不一定用ref 的方式顯式宣告。在reference的3.3.6節有詳細的介紹,autowire主要有5種模式 1 no ...