相关疑难解决方法(0)

春天 - @Transactional - 后台会发生什么?

我想知道当你用方法注释方法时实际发生了@Transactional什么?当然,我知道Spring会将该方法包装在Transaction中.

但是,我有以下疑问:

  1. 我听说Spring创建了一个代理类?有人可以更深入地解释这一点.实际存在于该代理类中的是什么?实际班级会发生什么?我怎样才能看到Spring创建的代理类
  2. 我还在Spring文档中读到:

注意:由于此机制基于代理,因此只会拦截通过代理进入的"外部"方法调用.这意味着'自调用',即目标对象中调用目标对象的其他方法的方法,即使被调用的方法被标记,也不会在运行时导致实际的事务@Transactional!

资料来源:http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html

为什么只有外部方法调用才会在Transaction下而不是自调用方法?

java spring transactional spring-jdbc spring-aop

313
推荐指数
6
解决办法
15万
查看次数

在类和方法上定义@Transactional之间有什么区别

情况1

@Transactional
public class UserServiceImpl implements UserService {

    ...................
    public void method1(){
        try{
            method2();
        }catch(Exception e){

        }
    }
    public void method2(){

    }
}
Run Code Online (Sandbox Code Playgroud)

案例2

public class UserServiceImpl implements UserService {

    ...................
    public void method1(){
        try{
            method2();
        }catch(Exception e){

        }
    }
    @Transactional
    public void method2(){

    }
}
Run Code Online (Sandbox Code Playgroud)

在case1中,如果发生任何异常,则回滚正在工作,但在情况2中它不起作用.如果我遵循case1,是否存在任何性能问题?

java spring spring-mvc spring-transactions

57
推荐指数
4
解决办法
4万
查看次数