spring之旅第三篇-spring配置詳解
上一篇學習了IOC的概念並初步分析了實現原理,這篇主要學習spring的配置,話不多說,讓我們開始!
一、Bean元素配置
1.1 基本配置
看一個最基本的bean配置
<bean name="hello" class="com.yuanqinnan.test.HelloWorld"></bean>
上面的配置中,我們將bean交給spring管理,看其中屬性欄位:
-
class:被管理物件的完整類名
-
name:被管理物件的名稱,可以通過名稱獲取改物件(可以重複,可以使用特殊字元)
-
id:與name作用相同(不可以重複,不可以使用特殊字元)
1.2 bean的進階配置
scope屬性
-
singleton:定義bean的範圍為每個Spring容器一個例項(預設值)
-
prototype:定義bean可以被多次例項化(使用一次就建立一次)
-
request:定義bean的範圍是HTTP請求,只有再使用有web能力的spring上下文時有效。
-
request:定義bean的範圍是HTTP請求,只有再使用有web能力的spring上下文時有效。
-
global-session:定義bean的範圍是全域性HTTP會話,只有再portlet上下文中有效。
生命週期屬性
-
init-method:配置一個方法作為生命週期初始化方法.spring會在物件建立之後立即呼叫.
-
destory-method:配置一個方法作為生命週期的銷燬方法.spring容器在關閉並銷燬所有容器中的物件之前呼叫.
程式碼如下
<bean id="hello"init-method="getInfo" destroy-method="destory" class="com.yuanqinnan.test.HelloWorld"> </bean>
注意,只有singleton的bean,destory-method才有效
1.3例項化bean的方式
-
使用類構造器例項化(預設無引數)
<bean id="hello" class="com.yuanqinnan.test.HelloWorld"> </bean>
-
使用靜態工廠方法例項化(簡單工廠模式)
public class HellowWorldFactory { public static HelloWorld createHellowWorld(){ returnnew HelloWorld(); } }
<bean name="hello2" class="com.yuanqinnan.test.HellowWorldFactory" factory-method="createHellowWorld"> </bean>
-
使用例項工廠方法例項化(工廠方法模式)
public class HellowWorldFactory2 { publicHelloWorld createHellowWorld(){ return new HelloWorld(); } }
<bean id="HellowWorldFactory2" class="com.yuanqinnan.test.HellowWorldFactory2"/> <bean id="hello3" factory-bean="HellowWorldFactory2" factory-method="createHellowWorld" />
1.4 spring的分模組配置
spring 允許多個檔案進行配置,可以按照模組來進行配置
<import resource="applicationContext2.xml"></import>
二、spring 屬性注入
2.1 set方法注入
<bean> 元素的 <property>子元素指明瞭使用它們的set方法來注入,可以使用property的value屬性來注入簡單型別
<bean name="user" class="com.yuanqinnan.test.User"> <!--值型別注入--> <property name="age" value="18"></property> <property name="name" value="tom"></property> <!-- 引用型別注入--> <property name="car" ref="car"></property> </bean> <bean name="car" class="com.yuanqinnan.test.Car"> <property name="color" value="blue"></property> </bean>
User類與Car類程式碼就不貼了,應該是可以看得懂。
2.2建構函式注入
使用constructor-arg來完成構造方法的注入,注入的方式和setter方式注入相同。 可以通過type屬性,控制注入的型別 可以通過index屬性,控制注入的順序 可以通過name屬性,控制注入的名字
<bean name="user2" class="com.yuanqinnan.test.User"> <constructor-arg name="name" index="0" type="java.lang.String" value="lucy"></constructor-arg> <constructor-arg name="age" index="1" type="java.lang.Integer" value="20"></constructor-arg> <constructor-arg name="car" ref="car"></constructor-arg> </bean>
2.3spel注入
<bean name="user3" class="com.yuanqinnan.test.User"> <property name="name" value="#{user.name}"></property> <property name="age" value="#{user2.age}"></property> <!-- 引用型別注入 為car屬性注入下方配置的car物件--> <property name="car" ref="car"></property> </bean>
三、複雜型別注入
3.1 陣列
<property name="arr"> <array> <value>tom</value> <value>lucy</value> <ref bean="user2"></ref> </array> </property>
3.2List
<property name="list"> <list> <value>tom</value> <value>lucy</value> <ref bean="user2"></ref> </list> </property>
3.3Set
<property name="set"> <set> <value>com.jbdc.mysql.Driver</value> <value>root</value> <ref bean="user"/> </set> </property>
3.4Map
<property name="map"> <map> <entry key="url" value=""></entry> <entry key="user" value-ref="user"></entry> <entry key-ref="user3" value-ref="user2"></entry> </map> </property>
3.5Properties
<property name="prop"> <props> <prop key="url">com.jbdc.mysql.Driver</prop> <prop key="userName">root</prop> <prop key="password">1234</prop> </props> </property>
總結:以上是spring的配置詳解,都是通過XML裝配,下一篇我們學習註解配置