@Transactional是声明式事务管理中使用的注解
尽管注解百度已经烂大街了还是要说一下
使用的位置
- 访问权限
public方法才会起作用,private方法上不起作用,这是由Spring AOP 的本质决定的。 - 添加在需要事务管理的方法上
- TestService中A、B两个方法,controller层调用A()方法的时候,方法B()中的注解会失效。
@Service
public class TestService{
public void A() {
B();
}
@Transactional
public void B(){}
}
- 同样是A、B两个方法,处于不同的类时,外部调用A()方法是,间接调用B()方法,此时事务生效。
@Service
public class AService{
@Resource
private BService bService;
public void A() {
bservice.B();
}
}
@Service
public class BService{
@Transactional
public void B(){}
}
- 接口中出现异常时,使用了try…catch…而未将异常抛出的情况下事务不生效
public class BService{
@Transactional
public void B(){
try{
//dosomething 产生异常
}catch(Exception ex){
//处理or不处理异常,但并不抛出新的异常
}
}
}