依賴注入就是指spring容器在建立被呼叫者的例項時,會自動地把呼叫者需要的物件例項注入給呼叫者,這樣呼叫者就可以通過spring容器直接獲取到被呼叫者的例項。
假設在spring框架下,當乙個物件例項a需要呼叫到另乙個物件例項b時,spring容器就會自動建立乙個例項b,並將這個例項b通過不同的注入方法來裝配到例項a上,這個將例項b注入給例項a的過程就稱為依賴注入。
spring中的依賴注入主要有四種方法:基於構造方法的注入、基於setter方法的注入、基於自動裝配的注入和基於註解的依賴注入。
構造方法注入其實就是通過bean對應類的構造方法,將這個呼叫者所依賴的物件進行注入。他一般通過呼叫帶引數的構造方法來實現,每乙個引數都代表著乙個依賴項,spring容器會根據構造方法的引數來決定呼叫哪個構造方法。
基於setter設定屬性方法注入就是通過該類提供的setter方法,對需要的屬性進行設定。
除了使用和標籤注入依賴以外,spring容器還可以通過自動裝配來進行依賴注入,這樣也可以減少我們在配置檔案中的注入語句編寫。
spring容器的自動裝配包括三種模式:bytype型別模式、byname名稱模式和constructor構造器模式。
4.1 bytype模式
對於bytype模式,spring ioc容器會通過反射來檢視bean定義的這個類,如果發現乙個bean物件被設定為自動裝配的bytype模式時,它會根據引數型別在 spring 容器中尋找與其引數型別相同的被依賴的bean物件。如果這個設定自動裝配的bean物件已經被建立,spring容器就會把被依賴的物件自動注入到其中;如果沒有建立就不會進行注入。這個依賴注入過程需要依靠bean提供的setter方法,否則無法完成。
4.2 byname模式
對於byname模式,spring容器會根據bean類中的屬性名稱,在spring容器中尋找和bean類屬性名稱相同的其他bean物件名,找到的話就進行依賴注入。
4.3 constructor模式
同前兩種模式類似,constructor模式是用於構造方法引數型別的,spring容器會根據bean的構造方法中的引數型別,在spring容器中尋找型別匹配的其他bean類,找到的話就進行注入。
4.4 缺陷
自動裝配最主要的問題就在於,如果找不到匹配的被依賴物件,spring容器就不會為bean進行依賴注入,這樣就導致bean獲取不到他所依賴的物件,呼叫時就會發生錯誤。
前兩種依賴注入都需要在配置檔案中手動進行注入語言的配置,但如果需要配置的bean模擬較多的時候,無疑會浪費我們很多的時間。spring2.5之後,spring容器增加了註解方式進行注入,能夠適用於較多bean類注入的情況。
spring主要提供了兩種註解方法:@autowired和@resource。
5.1 @autowired
這種方法可以對bean類的成員變數、方法以及構造方法進行標註,這樣就完成了注入的自動裝配。使用@autowired可以省去bean類中被注入物件的setter方法,它會預設按照依賴注入物件的型別進行自動匹配。
在bean類依賴注入物件前面加上@autowired語句,就可以完成這種註解方式。使用這種註解方式後,只需要在配置檔案中定義bean就行了,不需要再配置bean之間的關聯關係。
@autowired 還提供了乙個required 屬性,主要用來應對被依賴例項不存在的情況,required 為true時,如果注入的bean例項不存在,程式就會丟擲異常;如果為false,程式就會忽略這種情況。
同時,因為@autowired 註解預設是按型別進行匹配的,也就是 bytype模式,如果想要設定為按名稱匹配(byname),可以使用@qualifier註解結合使用。
5.2 @resource
這種方法同@autowired 註解功能是類似的,@resource也有name和type兩個主要的屬性。spring容器對於@resource註解的name屬性解析為bean物件的名稱,type則解析為bean物件的型別。
spring 依賴注入 Spring依賴注入
依賴注入 dependency injection,簡稱di 與控制反轉 ioc 的含義相同控制反 在使用spring框架之後,物件的例項不再由呼叫者來建立,而是由spring容器來建立,spring容器會負責控制程式之間的關係,而不是由呼叫者的程式 直接控制,這樣控制權由應用程式轉移到了sprin...
Spring依賴注入
所謂依賴注入,是指在程式執行過程中,如果需要呼叫另乙個物件協助時,無須在 中建立按被呼叫者,而是依賴外部注入。spring 的依賴注入對呼叫者和被呼叫者幾乎沒有任何要求,完全支援對 pojo 之間依賴關係的管理。依賴注入的兩種方式 1 設值注入 設值注入是指通過 setter 方法傳入被呼叫者的例項...
SPring依賴注入
所謂依賴注入,是指在程式執行過程中,如果需要呼叫另乙個物件協助時,無須在 中建立按被呼叫者,而是依賴外部注入。spring的依賴注入對呼叫者和被呼叫者幾乎沒有任何要求,完全支援對pojo之間依賴關係的管理。依賴注入的兩種方式 1 設值注入 設值注入是指通過setter方法傳入被呼叫者的例項。這種注入...