SPRING 声明式XML事务和注解式事务, 哪个优先级更高?

这个问题其实早就有了, 不过很懒 一直都没搞, 这次有个新项目, 刚好又学了点springjunit测试, 发现了一点问题, 也对以往的疑惑做了一些测试

SPRING 声明式XML事务和注解式事务, 哪个优先级更高?


几个关键代码, 其他省略


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

<tx:advice id="txAdvice">
<tx:attributes>
<!--tx:method name="get*" read-only="true"/-->
<tx:method name="test*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>

@Override
@Transactional(readOnly = false)
public void saveRole() {//这是manager代码
Role role = new Role("role1");
role = roleDao.save(role);
if (role.getId() != null)
throw new RuntimeException("error");
role = new Role("role2");
role = roleDao.save(role);
}

@Test
public void testSaveRole() {//这是junit test代码
roleManager.saveRole();
}



spring有2种方式声明事务
1 XML文件
2 注解

测试1 XML里设置 read-only="true", 注解 read-only="false" 执行出错 看来是XML优先级高
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

测试2 XML里设置 read-only="false", 注解 read-only="true" 执行成功 看来还是XML优先级高

测试3 XML里不设置 注解 read-only="true" 执行出错

不过和有的人得出的结论相悖 http://www.iteye.com/problems/10112

[b]本人 spring 版本 3.0.6[/b]

不知道有没有人做类似测试.


还有一个问题, 就是junit 事务的问题

@Test
public void testSaveRole() {
roleManager.saveRole();//此方法里的事务可以回滚
}

@Test
public void testSaveRole() {//但是这样写, 事务就不回滚
Role role = new Role("role1");
role = roleDao.save(role);
if (role.getId() != null)
throw new RuntimeException("error");
role = new Role("role2");
role = roleDao.save(role);
}

[b]不知道是什么原因.[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值