1. 程式人生 > >spring事務控制--xml配置與annotation註解 優先順序對比

spring事務控制--xml配置與annotation註解 優先順序對比

樓主下午看公司專案配置,發現專案中關於事物的配置,配置了兩種,一個是xml配置,另一種是annotation配置。特意比較下兩種的優先順序。

1,xml配置事物

<aop:config>
<aop:pointcut id="appService" expression="execution(* com.clife.commons.base.service.chealth.*.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="appService"/>
</aop:config>


<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="select*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

2,註解配置事物

    <aop:aspectj-autoproxy/>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

     對應的service實現類的方法上寫@Transactional(readOnly = false)  樓主的這個方法是向資料庫插入

二者進行比較的方法:<tx:method name="insert*" propagation="REQUIRED"/>  ----》》》<tx:method name="insert*" read-only="true" propagation="REQUIRED"/>

xml配置成只讀,註解配置成read-only="false",這時資料並不能插入資料庫


二者配置對換後,可以插入。

3,為什麼會這樣?