1. 程式人生 > >Spring Bean幾種注入方式——setter(常用),構造器,注入內部Bean,注入集合,介面...

Spring Bean幾種注入方式——setter(常用),構造器,注入內部Bean,注入集合,介面...

依賴注入分為三種方式:

1.1構造器注入

    構造器通過構造方法實現,構造方法有無引數都可以。在大部分情況下我們都是通過類的構造器來建立物件,Spring也可以採用反射機制通過構造器完成注入,這就是構造器注入的原理。

   程式碼清單:構造器注入

 1 package com.spring.chapter3;
 2 
 3 public class Role {
 4 
 5     private long id;
 6     private String roleName;
 7     
 8     public Role(long id,String roleName){
 9         this.id=id;
10         this.roleName=roleName;
11         
12     }
13     public void getCount(){
14         System.out.println("Role已被呼叫"+"\n"+"id:"+id+"\n"+"roleName:"+roleName);
15         
16     }
17 
18 }

  程式碼清單:構造器配置

1 <bean id="Role" class="com.spring.chapter3.Role">
2         <constructor-arg index="0" value="007"></constructor-arg>
3         <constructor-arg index="1" value="zhangqiang"></constructor-arg>
4     </bean>

 

元素名

作用

優缺點

constructor-arg
元素用於定義類構造方法的引數
注入簡單,不宜引數過多


 index
用於定義對應類構造方法的引數位置
value
設定值

 

1.2使用setter注入

  setter注入是Spring中最主流的注入方法(常用),好處就不用多說了。原理也是通過反射注入,直接上程式碼。(注意對應的實體類屬性必須實現set,get方法。如果實體類沒有屬性也會被注入)。

 1 package com.spring.chapter3;
 2 
 3 public class Role {
 4 
 5     public long getId() {
 6         return id;
 7     }
 8     public void setId(long id) {
 9         this.id = id;
10     }
11     public String getRoleName() {
12         return roleName;
13     }
14     public void setRoleName(String roleName) {
15         this.roleName = roleName;
16     }
17     private long id;
18     private String roleName;
19     
20 }

 

  Bean配置xml

1 <bean id="Role" class="com.spring.chapter3.Role">
2     </bean>

 2.1 注入內部Bean

注入內部Bean跟setter注入是差不多的,不用多說直接看程式碼。

  程式碼清單:內部Bean注入

 1 package com.spring.chapter3;
 2 
 3 public class Role {
 4 
 5     public int getId() {
 6         return id;
 7     }
 8 
 9     public void setId(int id) {
10         this.id = id;
11     }
12 
13     public String getRoleName() {
14         return RoleName;
15     }
16 
17     public void setRoleName(String roleName) {
18         RoleName = roleName;
19     }
20 
21     public DomePojo getDomePojo() {
22         return domePojo;
23     }
24 
25     public void setDomePojo(DomePojo domePojo) {
26         this.domePojo = domePojo;
27     }
28 
29     private DomePojo domePojo;  //注意這裡是類變數
30     private  int id;
31     private String RoleName;
32     public void getCount(){
33         System.out.println("我是Role類的方法");
34     }
35 }

 

程式碼清單:內部 bean 為基於 setter 注入進行配置的配置檔案 Spring.xml 檔案:

1  <bean id="DomePojo" class="com.spring.chapter3.DomePojo">
2      
3      </bean>
4     <bean id="Role" class="com.spring.chapter3.Role">
5         <property name="id" value="007"></property>
6         <property name="RoleName" value="zhangqiang"></property>
7         <property name="DomePojo" ref="DomePojo"></property>
8     </bean>

 

property name對應pojo中的屬性(類變數),ref關聯到對應Bean的id (注意:ref關聯的Bean一定要在Spring Ioc容器中定義,否則會報錯)

2.2 注入集合

如果想傳遞多個值,如 Java Collection 型別 List、Set、Map 和 Properties,應該怎麼做呢。為了處理這種情況,Spring 提供了四種類型的集合的配置元素,如下所示:

                  

元素描述
<list> 它有助於連線,如注入一列值,允許重複。
<set> 它有助於連線一組值,但不能重複。
<map> 它可以用來注入名稱-值對的集合,其中名稱和值可以是任何型別。
<props> 它可以用來注入名稱-值對的集合,其中名稱和值都是字串型別。

 

程式碼清單:Pojo實體類(注意必須setter方法)

 1 package com.spring.chapter4;
 2 
 3 import java.util.List;
 4 import java.util.Set;
 5 
 6 public class Collection {
 7     public Set getAddSet() {
 8         return addSet;
 9     }
10 
11     public void setAddSet(Set addSet) {
12         this.addSet = addSet;
13     }
14 
15     public List getAddList() {
16         return addList;
17     }
18 
19     public void setAddList(List addList) {
20         this.addList = addList;
21     }
22 
23     private Set addSet;
24     private List addList;
25 
26     public void getCount(){
27         System.out.println("我是Role類的方法");
28     }
29 }

 

程式碼清單:Bean配置

 1     <bean id="Collection" class="com.spring.chapter4.Collection">
 2         <property name="addList">
 3             <list>
 4                 <value>1</value>
 5                 <value>2</value>
 6                 <value>3</value>
 7                 <value>4</value>
 8             </list>
 9         </property>
10         <property name="addSet">
11             <set>
12                 <value>6</value>
13                 <value>7</value>
14                 <value>8</value>
15                 <value>9</value>
16             </set>
17         </property>
18     </bean>
19     

測試結果:

 

本文程式碼下載地址:https://files.cnblogs.com/files/ysource/springSetter%E7%AD%89%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5.rar

&n