1.不建议将Transactional标注在Interface上
Transactional注解即可以注在在Interface的方法上。又可以写在具体的Class上。而如果标注在Interface上且配置Spring AOP使用CGLib动态代理。会导致Transactional失效。原因看上面分析。
2.不能将Transactional标注在private、protected方法上
Transactional 标签必须标注在public修饰的方法上,否则Transactional同样不生效。
3.不能将Transactional标注在内部调用的方法上
Transactional必须标注在给外部调用的接口上。如:不带Transactional注解的方法a,调用带有Transactional注解的方法b,事务同样不生效。
public class Demo {
public void a(){
b();
}
@Transactional
public void b(){
}
以上几条禁忌同样适用于Spring的其它注解