spring常用的三種依賴注入方式

2021-09-24 14:17:08 字數 1638 閱讀 7512

日常開發中,某個類需要依賴其它類的方法,通常是new乙個依賴類再呼叫類例項的方法,這種開發存在的問題是new的類例項不好統一管理;

spring提出了依賴注入的思想,即依賴類不由程式設計師例項化,而是通過spring容器幫我們new指定例項,並且將例項注入到需要該物件的類中。

依賴注入的另一種說法是「控制反轉」,通俗的理解是:平常我們new乙個例項,這個例項的控制權是我們程式設計師,而控制反轉是指new例項工作不由我們程式設計師來做而是交給spring容器來做。

spring通過di(依賴注入)實現ioc(控制反轉),常用的注入方式主要有三種:構造方法注入,set方法引數注入,介面注入。

基於@autowired的自動裝配,預設是根據型別注入,可以用於構造器、介面、方法注入,使用方式如下:

@autowired

構造方法、方法、介面

@autowired預設是根據引數型別進行自動裝配,且必須有乙個bean候選者注入預設required=true,如果允許出現0個bean候選者需要設定屬性「required=false」,「required」屬性含義和@required一樣,只是@required只適用於基於xml配置的setter注入方式,只能打在setting方法上。

(1)、構造器注入:通過將@autowired註解放在構造器上來完成構造器注入,預設構造器引數通過型別自動裝配,如下所示:

public class test1  

}

(2)、介面注入:通過將@autowired註解放在構造器上來完成介面注入。

public class test2
(3)、方法引數注入:通過將@autowired註解放在方法上來完成方法引數注入。

public class test3   

public string getmessage()

}

public class test4   

//省略getter和setter

}

可以標註在字段或屬性的setter方法上,但它預設按名稱裝配。名稱可以通過@resource的name屬性指定,當註解標註在字段上,即預設取字段的名稱作為bean名稱尋找依賴物件,當註解標註在屬性的setter方法上,即預設取屬性名作為bean名稱尋找依賴物件。

@resource預設按名稱裝配,當找不到與名稱匹配的bean才會按型別裝配。如果沒有指定name屬性,並且按照預設的名稱找不到依賴物件時, @resource註解會回退到按型別裝配。但一旦指定了name屬性,就只能按名稱裝配了。

比如:我們用@autowired為上面的**messageinte***ce介面的例項物件進行註解,它會到spring容器中去尋找與messageinte***ce物件相匹配的型別,如果找到該型別則將該型別注入到messageinte***ce欄位中;

如果用@resource進行依賴注入,它先會根據指定的name屬性去spring容器中尋找與該名稱匹配的型別,例如:@resource(name="messageinte***ce"),如果沒有找到該名稱,則會按照型別去尋找,找到之後,會對字段messageinte***ce進行注入。

Spring依賴注入的三種方式

1 自動裝配 2 配置檔案ref配置 3 resource註解注入 使用 resource註解注釋需要注入的依賴宣告。如 public class usermanageimp implements iusermanage public void setuserdao iuserdao userdao...

spring 依賴注入的三種方式

autowired 構造器,引數,方法,屬性 都是從容器中獲取引數元件的值 set方法注入 構造器注入 作為bean方法的引數注入 例子 boss 注入car類 car類 package com.spring.bean component public class car boss類 package...

Spring學習(二)依賴注入的三種方式

依賴注入的意義 讓元件依賴於抽象,當元件要與其他實際物件發生依賴關係時,通過抽象來注入依賴的實際物件。1 介面注入 需要為業務物件編寫乙個介面,在介面中提供獲取元件的方法,然後讓具體的業務物件實現該介面即可。2 set注入 set注入指的是在接受注入的業務類中定義乙個set方法,並在引數中定義需要注...