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

本人 spring 版本 3.0.6

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


还有一个问题, 就是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);
	}

不知道是什么原因.

你可能感兴趣的:(spring,JUnit,事务,测试)