Spring框架中的三種事務處理,配置信息如何配置
第一種(基于Spring框架1.2):
<!-- 使用代理人的方式 -->
<!-- 因為本身service沒有事務的功能,所以給service找個代理人,來幫它處理事務 -->
<bean id="UsersService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 代理目標 (代理的是誰) -->
<property name="target">
<bean class="com.hygj.service.UsersService">
<property name="usersDAO">
<ref bean="UsersDAO"/>
</property>
</bean>
</property>
<!-- 設置代理的屬性 -->
<property name="transactionAttributes">
<props>
<!-- 設置代理范圍(粒度) key:方法名 *進行通配 value:事務等級 -->
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<!-- 確認事務管理器 -->
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
</bean>
------------------------------------------------------------------
第二種(基于Spring1.2):
<!-- 自動創建代理
當去訪問的類滿足beanNames所設定的條件,就給這個類自動創建一個代理類。創建完成后,去interceptors所指定的攔截器當中去尋找
要做的工作。到了攔截器之后,首先比對調用的方法是不是滿足攔截器所設定的方法的條件。如果滿足,則去指定的事務管理器當中去進行
事務操作。
<!-- 創建事務的攔截器 -->
<bean id="txInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 確認事務管理器 -->
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<!-- 事務當中的屬性 -->
<property name="transactionAttributes">
<props>
<prop key="save">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 根據類的名稱自動創建代理人 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 設置bean的名稱,給什么名字的類自動創建代理人 -->
<property name="beanNames">
<list>
<value>*Service*</value>
</list>
</property>
<!-- 確認事務的攔截器 -->
<property name="interceptorNames">
<list>
<value>txInterceptor</value>
</list>
</property>
</bean>
------------------------------------------------------------------
第三種(基于Spring框架2.0)、
<!-- 基于spring2.0 -->
<!-- 通知:在調用目標方法時,之前或之后所調用的方法 -->
<tx:advice id="myAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- name:方法名 可以使用通配符
read-only:只讀 默認為false -->
<tx:method name="*" read-only="true"/>
<tx:method name="*save*"/>
</tx:attributes>
</tx:advice>
<!-- 設置攔截的條件,并生成代理 -->
<aop:config proxy-target-class="true">
<!-- 設置通知器:
通知:做什么事
切入點:條件,滿足什么條件之后才去執行通知 -->
<aop:advisor advice-ref="myAdvice" pointcut="execution(* com.hygj.service..*.*(..))"/></aop:config>
本文由用戶 ophoper 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!