1. 程式人生 > >Spring三種bean注入方式

Spring三種bean注入方式

(http://glzaction.iteye.com/blog/1299441)

Spring中依賴注入有三種注入方式:

一、構造器注入;

二、設值注入(setter方式注入);

三、Feild方式注入(註解方式注入)。

一、構造器注入

     構造器注入顧名思義就是在程式元件中實現構造器,構造器可以是一個也可以是多個。廢話不多說,直接上程式碼。

Java程式碼  收藏程式碼
  1. package cn.glzaction.service.impl;  
  2. import java.util.List;  
  3. import cn.glzaction.service.interfaces.PersonDaoIF;  
  4. import cn.glzaction.service.interfaces.PersonServiceIF;  
  5. public class PersonServiceBean implements PersonServiceIF{  
  6. //自定義類  
  7.     private PersonDaoIF personDaoBean;  
  8. //String型別  
  9.     private String name;  
  10. //集合型別    
  11.     private List list;  
  12. //構造器     
  13.     public PersonServiceBean(PersonDaoBean personDaoBean,String name,List list){  
  14.         this.personDaoBean = personDaoBean;  
  15.         this.name = name;  
  16.         this.list = list;  
  17.     }  
  18. //方法,用於顯示  
  19.     public void display(){  
  20.         personDaoBean.add();  
  21.         System.out.println(name);  
  22.         System.out.println(list);  
  23.     }  
  24. }  

上面的程式碼中構造器要注入三個引數,同時這三個引數也是三種不同的型別,自定義類、String型別,集合型別,其中自定義類PersonDaoBean 具體的實現我們這裡就不累述了,因為這不是重點。

下面我們再來看一下在Spring的配置檔案中如何來配置。

Xml程式碼  收藏程式碼
  1. <bean id="personDao" class="cn.glzaction.service.impl.PersonDaoBean"></bean >  
  2. <!--構造器方式注入-->  
  3. <bean id="personService" class="cn.glzaction.service.impl.PersonServiceBean">  
  4.     <constructor-arg index="0" type="cn.glzaction.service.impl.PersonDaoBean" ref="personDao"/>  
  5.     <constructor-arg index="1" type="java.lang.String" value="glzaction"/>  
  6.     <constructor-arg index="2" type="java.util.List">  
  7.         <list>  
  8.             <value>list1</value>  
  9.             <value>list2</value>  
  10.             <value>list3</value>  
  11.         </list>  
  12.     </constructor-arg>  
  13. </bean>  

      java程式碼如何實現構造器我想大家一定都很清楚,否則的話就有點講不過去了,呵呵,所以這裡我也就不加以說明了,主要說一下上面的xml配置。id為“personDao”的bean是PersonServiceBean的私有屬性,它的注入是採用無參構造器的注入方式注入的,這也不詳細說明。主要說一下id為“personService”類的構造器注入。<coustructor-arg>是構造器標籤元素,通過設定它的屬性可以往構造器傳遞引數,index屬性值表示要設定的引數在構造器形參中的索引順序,例如上面的配置,list是第三個引數,所以它對應的索引為2,index是可選屬性,所謂可選並不是說在任何情況下都可以不使用,要視具體情況而定,type為引數的型別,這個也是可選引數。還有兩個很重要的屬性就是ref和value,如果注入的是bean,就要使用ref,ref的值就是對應的bean。如果注入的是基本型別或者string型別就用value,直接將對應的值填入即可。

二、設值注入(setter方式注入)

設值注入就是通過setXxxx方法將bean注入到元件中,自定義類如下

Java程式碼  收藏程式碼
  1. package cn.glzaction.service.impl;  
  2. import cn.glzaction.service.interfaces.PersonDaoIF;  
  3. import java.util.*;  
  4. public class PersonDaoBean implements PersonDaoIF {  
  5.     private String name;  
  6.     private Integer id;  
  7.     private List list;  
  8.     private Map map;  
  9.     public void setName(String name) {  
  10.         this.name = name;  
  11.     }  
  12.     public void setId(Integer id) {  
  13.         this.id = id;  
  14.     }  
  15.     public void setList(List list) {  
  16.         this.list = list;  
  17.     }  
  18.     public void setMap(Map map) {  
  19.         this.map = map;  
  20.     }  
  21.     @Override  
  22.     public void add() {  
  23.         // TODO Auto-generated method stub  
  24.         System.out.println(map);  
  25.         System.out.println(list);  
  26.         System.out.println(id);  
  27.         System.out.println(name);  
  28.     }  
  29. }  

採用設定注入只要有setter方法即可,但是有時由於程式設計習慣也會講getter方法引進,但是要清楚:設值注入與getter方法無關。這裡還有一點需要注意,那就是能使用基本型別,如果非要使用基本型別的話就要使用其對應的包裝型別,如上面使用的是Integer而不是int。Spring的xml配置如下:

Xml程式碼  收藏程式碼
  1. <bean id="personDao" class="cn.glzaction.service.impl.PersonDaoBean">  
  2.     <property name="name" type="java.lang.String" value="glzaction"/>  
  3.     <property name="id" type="java.lang.Integer" value="1"/>  
  4.     <property name="list" type="java.util.List">  
  5.         <list>  
  6.             <value>list1</value>  
  7.             <value>list2</value>  
  8.             <value>list3</value>  
  9.         </list>  
  10.     </property>  
  11.     <property name="map" type="java.util.Map">  
  12.         <map>  
  13.             <entry key="key1" value="value1"></entry>  
  14.             <entry key="key2" value="value2"></entry>  
  15.         </map>  
  16.     </property>  
  17. </bean>  

 設值注入採用的是<property>標籤元素,其中的name屬性對應的是要注入的變數名,type屬性值對應的該變數的型別,可以是自定義類或者包裝型別。value屬性對應的是相應的值,還有一個ref屬性,該屬性值對應的是bean。