** 所謂依賴注入,其實就是給物件裡的屬性賦值,因為物件裡有其他物件,因此就形成了依賴。spring有4種方式來給屬性賦值:**
1. 構造方法注入
2. set方法注入
3. 自動裝配
4. 註解
構造方法注入是指在構造方法中注入屬性或者物件來實現依賴注入,如下所示,在標籤中定義乙個id為userdaoimpl的bean,並通過注入了name為username,value為admin的值,注入完成後直接通過this.username獲取到值admin。其中引用型別使用ref屬性,基本型別使用value屬性。
public class userdaoimpl xml**
set方法注入就是通過在類中實現get、set方法來實現屬性或者物件的依賴注入,如下所示,在標籤中定義乙個id為userdaoimpl的bean,並通過注入了name為username,value為admin的值,注入完成後直接通過getusername()獲取到值admin。
public class userdaoimpl
public void setusername(string username) xml**
spring提供了自動裝配的功能,簡化了我們的配置,自動裝配預設是不開啟的,常用的方式有兩種:
byname:通過引數名自動裝配,如下所示,id為userservice的的autowire被設定為byname後,ioc容器會通過名字來自動裝配,發現userservice類中有個叫userdao的屬性,然後看看ioc容器中有沒有id為userdao的,如果有就裝配進去。
bytype:通過引數型別自動裝配,當autowire被設定為bytype後,ioc容器會看看裡面有沒有userdao型別的,有就裝配進去。
@autowired註解可以實現自動裝配,只要在對應的屬性上標記該註解,但是@autowired註解只按照bytype注入。
public class usercontroller {
@autowired
private iuserservice userservice;
@resource註解可以實現自動裝配,它有兩個重要屬性name和type,name屬性解析為bean的名字,type屬性則解析為bean的型別。所以如果使用name屬性,則使用byname的自動注入策略,而使用type屬性則使用bytype自動注入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byname自動注入策略。
@autowired註解和@resource註解的作用相同,只不過@autowired按照bytype注入,如果@autowired想使用名稱可以結合@qualifier註解進行使用
Spring bean的迴圈依賴問題
傳送門 通過迴圈依賴問題徹底理解 spring ioc 的精華 迴圈依賴其實就是迴圈引用,也就是兩個或則兩個以上的bean互相持有對方,最終形成閉環。比如a依賴於b,b依賴於c,c又依賴於a。spring 中的迴圈依賴有構造器迴圈依賴和setter迴圈依賴。spring容器會將當前正在建立的bean...
Spring bean 繼承與依賴
spring 允許繼承 bean 的配置,被繼承的 bean 稱為父 bean.繼承這個父 bean 的 bean 稱為子 bean 子 bean 從父 bean 中繼承配置,包括 bean 的屬性配置 子 bean 也可以覆蓋從父 bean 繼承過來的配置 父 bean 可以作為配置模板,也可以作...
spring依賴注入的4種方式
一 set注入 必須要有setter方法 public class userdao package com.yao.service import com.yao.pojo.userdao public class userservice public void test userdao class ...