<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="https://www.springframework.org/schema/aop"
xmlns:tx="https://www.springframework.org/schema/tx"
xmlns:context="https://www.springframework.org/schema/context"
xsi:schemaLocation="https://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
https://www.springframework.org/schema/aop
https://www.springframework.org/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不能識別<tx:advice/>標簽
在開發Spring的過程中,有時會出現Eclipse不能識別<tx:advice/>標簽。
提示出現以下錯誤:
The prefix "tx" for element "tx:advice" is not bound
這個錯誤的原因很簡單是:
我們在定義申明AOP的時候。。沒有加載schema。
具體表現如下:
Xml代碼
<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代理設置–>
<aop:config proxy-target-class="true">
….
</aop:config>
</beans>
這時會拋出異常不認<TX>標簽。。起先還以為是沒有加載JAR包呢。。
後來讀AOP文檔才發現<beans>中要加入“xmlns:aop”的命名申明,並在“xsi:schemaLocation”中指定aop配置的schema的地址
配置文件如下:
Xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans "
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance "
xmlns:aop="https://www.springframework.org/schema/aop "
xmlns:tx="https://www.springframework.org/schema/tx "
xsi:schemaLocation="https://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
https://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd ">
這些才是最關鍵的地方。。後面的配置不變。。。。
Spring使用 <tx:advice>和 <aop:config> 用來配置事務,具體如何配置你可以參考Spring文檔。
綜上:包com.evan.crm.service下的任意class的具有任意返回值類型、任意數目參數和任意名稱的方法
<tx:advice/> 有關的設置
這一節裡將描述通過 <tx:advice/> 標簽來指定不同的事務性設置。默認的 <tx:advice/> 設置如下:
事務傳播設置是 REQUIRED
隔離級別是 DEFAULT
事務是 讀/寫
事務超時默認是依賴於事務系統的,或者事務超時沒有被支持。
任何 RuntimeException 將觸發事務回滾,但是任何 checked Exception 將不觸發事務回滾
這些默認的設置當然也是可以被改變的。 <tx:advice/> 和 <tx:attributes/> 標簽裡的 <tx:method/> 各種屬性設置總結如下:
表 9.1. <tx:method/> 有關的設置
屬性 是否需要? 默認值 描述
name 是 與事務屬性關聯的方法名。通配符(*)可以用來指定一批關聯到相同的事務屬性的方法。 如:'get*'、'handle*'、'on*Event'等等。
propagation 不 REQUIRED 事務傳播行為
isolation 不 DEFAULT 事務隔離級別
timeout 不 -1 事務超時的時間(以秒為單位)
read-only 不 false 事務是否隻讀?
rollback-for 不 將被觸發進行回滾的 Exception(s);以逗號分開。 如:'com.foo.MyBusinessException,ServletException'
no-rollback-for 不 不 被觸發進行回滾的 Exception(s);以逗號分開。 如:'com.foo.MyBusinessException
作者:Tender001