Spring兩種注入方式的區別

2021-06-21 15:57:06 字數 1345 閱讀 3641

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 的名稱,這樣歧義就消除了,可以通過下面的方法解決異常:

@autowired

public

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...