测试代码
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext4.xml") public class Test4 { @Autowired StudentService studentService; @Test public void test(){ studentService.transactionTest(); } }你可能会觉得注解的方式比xml配置简单的多,但是考虑一下,当你的项目特别大,涉及的表很多的时候呢,你可能需要些很多很多的注解,假设后期需要修改某些属性,还得一个个改;
所以大项目建议采用XML,小项目使用注解也ok;
原理简述声明式事务其底层用的还是AOP,你完全可以自己手动的配置每个环节,如目标,通知,切面,代理等,这能让你更清晰的理解每一行代码背后到底做了什么事情;
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans "> <import resource="mybatis-beans.xml"/> <!-- 添加事务管理器--> <bean> <property ref="dataSource"/> </bean> <!-- 要进行事务增强的目标对象--> <bean/> <!-- 事务通知--> <bean> <property ref="transactionManager"/> <property> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <!-- 代理对象--> <bean> <property ref="serviceTarget"/> <property> <list> <idref bean="transactionInterceptor"/> </list> </property> </bean> </beans>测试代码:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext5.xml") public class Test5 { @Autowired @Qualifier("orderService") StudentService studentService; @Test public void test(){ Student student = studentService.getStudent(1); student.setAge(1); studentService.update(student); } }