看下面这个测试:
1.测试用到的类,AService其中有2个方法分别是f1(); f2(); AServiceImpl中对于两个方法的实现:
@Override
public void f1() {
Session session = getSession();
logger.debug(session.hashCode());
}
@Override
public void f2() {
f1();
f1();
}
2.使用spring aop将事务配置在AService的任意方法上。
3.TestCase代码如下:
@Test
public void testList() throws ParseException, InterruptedException {
log.debug("invoke f1 2 times");
aService.f1();
aService.f1();
log.debug("invoke f2 ");
aService.f2();
}
运行结果如下:
2013-07-25 16:31:26,359 [DEBUG] ****testList(DataSourceTestCase.java:18) - invoke f1 2 times
2013-07-25 16:31:26,375 [DEBUG] ****.f1(FundProfileServiceImpl.java:25) - 15095802
2013-07-25 16:31:26,390 [DEBUG] ****.f1(FundProfileServiceImpl.java:25) - 27653884
2013-07-25 16:31:26,390 [DEBUG] ****.testList(DataSourceTestCase.java:22) - invoke findForTest2
2013-07-25 16:31:26,390 [DEBUG] ****.f1(FundProfileServiceImpl.java:25) - 19997070
2013-07-25 16:31:26,406 [DEBUG] ****.f1(FundProfileServiceImpl.java:25) - 19997070
可见在testList方法中调用的两次f1,对应的session不是同一个实例。
f2调用的两次f1中对应的session是同一实例。
原因应该是这样:
在testList方法中调用的两次f1,是两个不同的事务。f2调用的两次f1是在同一事务中。
对吧?应该不确切。