spring兩種注入方式分別是:@autowired和@resource
@autowired是按照型別來裝配依賴物件的,預設情況下,這種注入方式要求該依賴物件必須存在,如果允許其有null值 ,可以設定其required屬性為false。
<
bean
class
="org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor"
/>
可以將autowired註解在setter方法上。也可以將autowired註解在建構函式上。
當我們在 spring 容器中配置了兩個型別為 a 型別的 bean,當對物件的a成員變數進行自動注入時,spring 容器將無法確定到底要用哪乙個 bean,就會發生異常。
spring 允許我們通過 @qualifier 注釋指定注入 bean 的名稱,這樣歧義就消除了,可以通過下面的方法解決異常:
@autowiredpublic
void
seta(@qualifier("a
")a a)
使用@qualifier時,此時的注入方式從按照型別變為按照名稱。
@qualifier可以使用到成員變數、方法入參及建構函式入參時。
@resource是按照名稱來裝配依賴物件的,名稱可以通過其name屬性來指定,當沒有指定name屬性時,則當註解標註在某字段上時,則使用該欄位名稱作為bean名稱來尋找依賴物件。當註解標註在屬性的setter方法上時,則使用該屬性名稱作為bean名稱來尋找依賴物件。
@resource有兩個重要的屬性,分別是name和type, name屬性標註的是bean的名字,而type屬性標註的是bean的型別。當使用name屬性時,表示注入時將按照名稱進行注入,當使用type屬性時,表示注入時將按照型別進行注入。
resource
註解注意:
1
、當不指明
name
時,按字段的
name
屬性查詢
xml檔案中
bean
的id,
如果找到,就進行注入,如果找不到,則按字段的型別查詢後進行注入。
2
、如果沒有指定
name
屬性,並且按照預設的名稱仍然找不到依賴物件時,
@resource
註解會回退到按型別裝配。但一旦指定了
name
屬性,就只能按名稱裝配了。
Spring的兩種注入方式
帶著前面的疑問,不斷的學習spring的知識,然後再回過頭去解決那些疑問。現在我們來看看spring的兩種注入方式 設值注入 設值注入式利用setter的方式為bean注入依賴關係的方式。上一節就是使用設值注入為bean注入依賴關係。設值注入的關鍵就是在類中必須存在乙個該屬性的setter方法,否則...
常見Spring依賴注入的兩種方式
設定注入 ioc容器使用屬性的setter方法來注入被依賴的例項。構造注入 ioc容器使用構造器來注入被依賴的例項。兩種方法的 比較 設定注入 private string name private string password private void setname string name 同...
Spring依賴注入常用的兩種方式
spring中依賴注入 定義物件之間的彼此依賴,常用的兩種注入方式 setter方法和構造器 1 setter方法 在容器中宣告變數並插入對應setter和getter方法,在對應xml文件中配置,片段 public class animalser public void setcat cat ca...