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,為什麼會這樣?