<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www./schema/beans"
xmlns:xsi="http://www./2001/XMLSchema-instance"
xmlns:aop="http://www./schema/aop"
xmlns:tx="http://www./schema/tx"
xmlns:context="http://www./schema/context"
xsi:schemaLocation="http://www./schema/beans
http://www./schema/beans/spring-beans.xsd
http://www./schema/tx
http://www./schema/tx/spring-tx.xsd
http://www./schema/aop
http://www./schema/aop/spring-aop.xsd "
>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<!-- <tx:method name="*" propagation="true" />-->
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="allManagerMethod"
expression="execution(* com.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="allManagerMethod" />
</aop:config>
</beans>
Eclipse不能識(shí)別<tx:advice/>標(biāo)簽
在開發(fā)Spring的過程中,有時(shí)會(huì)出現(xiàn)Eclipse不能識(shí)別<tx:advice/>標(biāo)簽,。
提示出現(xiàn)以下錯(cuò)誤:
The prefix "tx" for element "tx:advice" is not bound
這個(gè)錯(cuò)誤的原因很簡(jiǎn)單是:
我們?cè)诙x申明AOP的時(shí)候,。。沒有加載schema,。
具體表現(xiàn)如下:
<beans>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*" propagation="REQUIRES_NEW" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<!-- aop代理設(shè)置-->
<aop:config proxy-target-class="true">
....
</aop:config>
</beans>
這時(shí)會(huì)拋出異常不認(rèn)<TX>標(biāo)簽,。。起先還以為是沒有加載JAR包呢,。。
后來讀AOP文檔才發(fā)現(xiàn)<beans>中要加入“xmlns:aop”的命名申明,,并在“xsi:schemaLocation”中指定aop配置的schema的地址
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www./schema/beans "
xmlns:xsi="http://www./2001/XMLSchema-instance "
xmlns:aop="http://www./schema/aop "
xmlns:tx="http://www./schema/tx "
xsi:schemaLocation="http://www./schema/beans
http://www./schema/beans/spring-beans.xsd
http://www./schema/tx
http://www./schema/tx/spring-tx.xsd
http://www./schema/aop
http://www./schema/aop/spring-aop.xsd ">
這些才是最關(guān)鍵的地方。,。后面的配置不變。。,。,。
Spring使用 <tx:advice>和 <aop:config> 用來配置事務(wù),,具體如何配置你可以參考Spring文檔,。
我解釋一下(* com.evan.crm.service.*.*(..))中幾個(gè)通配符的含義:
第一個(gè) * —— 通配 任意返回值類型
第二個(gè) * —— 通配 包c(diǎn)om.evan.crm.service下的任意class
第三個(gè) * —— 通配 包c(diǎn)om.evan.crm.service下的任意class的任意方法
第四個(gè) .. —— 通配 方法可以有0個(gè)或多個(gè)參數(shù)
綜上:包c(diǎn)om.evan.crm.service下的任意class的具有任意返回值類型,、任意數(shù)目參數(shù)和任意名稱的方法
<tx:advice/> 有關(guān)的設(shè)置
這一節(jié)里將描述通過 <tx:advice/>
標(biāo)簽來指定不同的事務(wù)性設(shè)置。默認(rèn)的 <tx:advice/>
設(shè)置如下:
-
事務(wù)傳播設(shè)置是 REQUIRED
-
隔離級(jí)別是 DEFAULT
-
事務(wù)是 讀/寫
-
事務(wù)超時(shí)默認(rèn)是依賴于事務(wù)系統(tǒng)的,,或者事務(wù)超時(shí)沒有被支持。
-
任何 RuntimeException
將觸發(fā)事務(wù)回滾,,但是任何 checked Exception
將不觸發(fā)事務(wù)回滾
這些默認(rèn)的設(shè)置當(dāng)然也是可以被改變的,。 <tx:advice/>
和 <tx:attributes/>
標(biāo)簽里的 <tx:method/>
各種屬性設(shè)置總結(jié)如下:
表 9.1. <tx:method/>
有關(guān)的設(shè)置
屬性 |
是否需要,? |
默認(rèn)值 |
描述 |
name |
是 |
|
與事務(wù)屬性關(guān)聯(lián)的方法名。通配符(*)可以用來指定一批關(guān)聯(lián)到相同的事務(wù)屬性的方法,。 如:'get*' ,、'handle*' ,、'on*Event' 等等,。
|
propagation |
不 |
REQUIRED |
事務(wù)傳播行為 |
isolation |
不 |
DEFAULT |
事務(wù)隔離級(jí)別 |
timeout |
不 |
-1 |
事務(wù)超時(shí)的時(shí)間(以秒為單位) |
read-only |
不 |
false |
事務(wù)是否只讀,? |
rollback-for |
不 |
|
將被觸發(fā)進(jìn)行回滾的 Exception(s) ,;以逗號(hào)分開,。 如:'com.foo.MyBusinessException,ServletException'
|
no-rollback-for |
不 |
|
不 被觸發(fā)進(jìn)行回滾的 Exception(s) ;以逗號(hào)分開,。 如:'com.foo.MyBusinessException
|