你不知道的Spring配置檔案

阿豪聊乾貨發表於2016-04-01

  Spring配置檔案是用於指導Spring工廠進行Bean生產、依賴關係注入(裝配)及Bean例項分發的"圖紙"。Java EE程式設計師必須學會並靈活應用這份"圖紙"準確地表達自己的"生產意圖"。Spring配置檔案是一個或多個標準的XML文件,applicationContext.xml是Spring的預設配置檔案,當容器啟動時找不到指定的配置文件時,將會嘗試載入這個預設的配置檔案。

       下面列舉的是一份比較完整的配置檔案模板,文件中各XML標籤節點的基本用途也給出了詳細的解釋,這些XML標籤節點在後續的知識點中均會用到,熟練掌握了這些XML節點及屬性的用途後,為我們動手編寫配置檔案打下堅實的基礎。

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <beans //整個配置的根節點,包含一個或者多個bean元素
  3 
  4        //最基本的名稱空間定義
  5        xmlns="http://www.springframework.org/schema/beans"    
  6 
  7        //最基本的名稱空間定義
  8        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  9 
 10        //啟動自動掃描或註解裝配的名稱空間
 11        xmlns:context="http://www.springframework.org/schema/context"    
 12 
 13        //啟用AOP功能的名稱空間
 14        xmlns:aop="http://www.springframework.org/schema/aop"    
 15 
 16        //啟用宣告事務的名稱空間
 17        xmlns:tx="http://www.springframework.org/schema/tx"  
18 //與上述名稱空間定義相配套的schema定義檔案的裝載路徑 19 xsi:schemaLocation="http://www.springframework.org/schema/beans 20 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 21 http://www.springframework.org/schema/context 22 http://www.springframework.org/schema/context/spring-context-2.5.xsd 23 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 24 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 25 26 <!-- 配置開啟註解處理器 --> 27 <context:annotation-config/> 28 29 <!--開啟元件自動掃描,掃描路徑由base-package屬性指定,代表掃描指定包名以及其子包 --> 30 <context:component-scan base-package="test"></context:component-scan> 31 32 <!--開啟基於@AspectJ切面的註解處理器--> 33 <aop:aspectj-autoproxy/> 34 35 <!-- 引入配置檔案,檔案位置由location屬性指定 --> 36 <context:property-placeholder location="xxx"/> 37 38 <!--使用class屬性指定類的預設構造方法建立一個單例項Bean,名稱由id屬性指定 39 1.scope屬性為 40 prototype時表示每次將生成新的例項,即原型模式 41 singleton時表示在每個Spring IOC容器中該bean定義只有一個物件例項 42 2.init-method:初始化時呼叫的方法名 43 3.destroy-method:物件銷燬時呼叫的方法名 44 --> 45 <bean id="Bean例項名稱" class="Bean類全名稱" scope="prototype" init-method="init" destroy-method="close"> 46 47 <property name="Bean類中的屬性名稱" value="直接指定屬性值"/> 48 49 <property name="Bean類中的屬性名稱" ref="要引用的Bean名稱"/> 50 51 <property name="Bean類中的屬性名稱"> 52 <!--建立一個內部匿名Bean例項賦值給指定的屬性,該匿名Bean例項無法被外界訪問--> 53 <bean class="Bean類全名"/> 54 </property> 55 56 <property name="Bean類中的Set型別屬性名稱"> 57 <!-- 58 set標籤用於建立一個Set型別的例項賦值給指定的Set型別屬性,Set例項中的元素 59 通過value或ref子標籤指定。對於基本資料型別的元素可由value標籤生成,如果需 60 要引用其他Bean例項作為Set元素的話,可由ref標籤指定。 61 --> 62 <set> 63 <value>要設定到set中的元素</value> 64 <ref bean="要引用的Bean名稱"/> 65 </set> 66 </property> 67 68 <property name="Bean類中的List型別屬性名稱"> 69 <!-- 70 list標籤用於建立一個List型別的例項賦值給指定的List型別屬性,List例項中的元素 71 通過value或ref子標籤指定。對於基本資料型別的元素可由value標籤生成,如果需要引 72 用其他Bean例項作為List元素的話,可以由ref標籤指定。 73 --> 74 <list> 75 <value>要設定到list中的元素</value> 76 <ref bean="要引用的Ben名稱"/> 77 </list> 78 </property> 79 80 <property name="Bean類中的Map型別屬性名稱"> 81 <!-- 82 map標籤用於建立一個Map型別的例項賦值給指定的Map型別屬性,Map例項中的元素通過 83 entry標籤指定。Map元素的鍵由entry標籤的key屬性直接指定,值則可由value或ref子 84 標籤的key屬性直接指定。對於基本資料型別的元素可由value標籤生成,如果需要引用 85 其他Bean例項作為List元素的話,可以由ref標籤指定。 86 --> 87 <map> 88 <entry key="map元素的key"> 89 <value>map元素的value</value> 90 </entry> 91 <entry key="map元素的key"> 92 <ref bean="要引用的Ben名稱"/> 93 </entry> 94 </map> 95 </property> 96 97 <property name="Bean類中的Properties型別屬性名稱"> 98 <!-- 99 建立一個Properties型別的例項賦值給指定的Properties型別屬性 100 --> 101 <props> 102 <!--Properties例項中的元素由prop標籤生成,屬性項元素的鍵由key屬性指定,屬性元素 103 的值可直接放置在prop標籤中--> 104 <prop key="properties元素的key">properties元素的value</prop> 105 </props> 106 </property> 107 108 <property name="Bean類中要初始化為null的屬性名稱"> 109 <null/><!--null標籤用於給需要賦值為null值得屬性進行賦null值--> 110 </property> 111 112 <!-- 113 通過傳入相應的構造引數進行Bean例項化,constructor-arg標籤用於指定一個構造引數,其index 114 屬性標明當前是第幾個構造引數(從0開始),type屬性宣告構造引數的型別,構造引數的值如果是基 115 本型別可由value屬性值直接指定,如果是物件的引用,則由ref屬性指定。 116 --> 117 <constructor-arg index="從0開始的序號" type="構造引數的型別" value="構造引數的值"/> 118 <constructor-arg index="從0開始的序號" type="構造引數的型別" ref="要引用的Bean名稱"/> 119 </bean> 120 121 <!--配置切面--> 122 <bean id="目標物件名稱" class="目標物件全名"/> 123 <bean id="切面例項名稱" class="切面類全名"/> 124 <aop:config> 125 <aop:aspect id="切面id" ref="要引用的切面例項名稱"> 126 <aop:pointcut id="切入點名稱" expression="切入點正規表示式"/> 127 <aop:before pointcut-ref="切入點名稱" method="切面類中用作前置通知的方法名"/> 128 <aop:after-returing pointcut-ref="切入點名稱" method="切面類中用作後置通知的方法名"/> 129 <aop:after-throwing pointcut-ref="切入點名稱" method="切面類中用作異常通知的方法名"/> 130 <aop:after pointcut-ref="切入點名稱" method="切面類中用作最終通知的方法名"/> 131 <aop:around pointcut-ref="切入點名稱" method="切面類中用作環繞通知的方法名"/> 132 </aop:aspect> 133 </aop:config> 134 135 <!-- 配置事務管理器 --> 136 <bean id="事務管理器例項名稱" class="事務管理器類全名"> 137 <property name="資料來源屬性名稱" ref="要引用的資料來源例項名稱"> 138 </bean> 139 140 <!-- 配置一個事務通知 --> 141 <tx:advice id="" transaction-manager=""> 142 <tx:attributes> 143 <!-- 方法以get開頭的,不使用事務 --> 144 <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/> 145 <!-- 其他方法以預設事務進行 --> 146 <tx:method name="*" /> 147 </tx:attributes> 148 </tx:advice> 149 150 <!-- 使用AOP技術實現事務管理 --> 151 <aop:config> 152 <aop:pointcut id="事務切入點名稱" expression="事務切入點正規表示式"/> 153 <aop:advisor advice-ref="事務通知名稱" pointcut-ref="事務切入點名稱"/> 154 </aop:config> 155 156 <!--使用基於註解方式配置事務, --> 157 <tx:annotation-driven transaction-manager="事務管理器Bean的id"/> 158 159 </beans>

相關文章