Spring注解事务失效原因以及解决方法

原因

在于spring 声明示事物使用动态代理实现,而当调用同一个类的方法时,是会不会走代理逻辑的,自然事物的配置也会失效。

比如Spring调用同一个类下的其他方法时用的是this.xxx(),所以不会走代理,导致事务失效

解决方法

在spring xml中配置 暴露proxy 对象,然后在代码中用AopContext.currentProxy() 就可以获当前代理对象

xml配置文件配置暴露代理对象


调用是声明走代理类

((XXXSerivce) AopContext.currentProxy()).xxxx();//AopContext.currentProxy()声明为代理类再强转为你要的Service

 

你可能感兴趣的:(java)