spring中事务的注解配置优先级别

spring中对于事务的注解配置可以使用两种方式,一种是

 <tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="create*">
<tx:method name="save*">
<tx:method name="delete*">
<tx:method name="*" read-only="true">
<tx:method name="*" rollback-for="Exception">
</tx:attributes>
</tx:advice>
&lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;
    &lt;property name="sessionFactory" ref="sessionFactory"&gt;
&lt;/bean&gt;

<aop:config>
<aop:advisor pointcut="execution(* ..service.*Manager.(..))" advice-ref="txAdvice">
</aop:config>



如果说在ServiceImpl.java中注明@Transactional,如

@Transactional(readOnly=true)
public class ServiceImpl implements Service {
// ...
}


那么可以在配置中写入以下代码就可以了

<!---->
<tx:annotation-driven transaction-manager="transactionManager">
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory">
</bean>




如果上述两种方式同时存在的时候,代码以何种事务控制的方式为准?在此先谢谢各位的帮助!

我的测试代码跟楼主你的类似。
我贴一下错误,当我给类加上注解的时候会报这个错:
xception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

去掉呢。就没事了。我的定义里把save等设置为非read-only,跟你的一样。

故证明:注解比XML配置优先级要高。

我觉得应该是第二种
毕竟第二种是直接在代码中控制了,当调用这个方法时,事务也就相应的启动了吧

注解比XML配置优先级要高。

经过测试检验。。。楼主可以试试。。。