背景
失效代码例子
public class Service {
public void A(){
//业务代码
B();
//其它业务代码
}
@Transactional
//数据库操作
public void B() {
//方法B的事务没生效
}
}
原因
Spring在启动时会扫描所有需代理的bean,而那些需代理的bean已全部通过创建代理来返回bean.
Spring的事务的切面是作用在代理类上的,直接service类的内部调用无法切中代理类的pointcut
解决方案
使用代理类来调用方法,来命中aop的pointcut
AopContext.currentProxy()
,首选这种模式使用
BeanFactory
获取bean直接调用service类注入自己
文章转载自小D学Java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




