Spring aop 拦截不到Dao

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring aop 拦截不到Dao相关的知识,希望对你有一定的参考价值。

我用的Dao是继承自BaseDao里面没有任何代码,我用aop拦截Dao对数据库的操作。Service里有个方法里嵌套Dao的方法,为什么调用Service的时候,AOP不执行拦截
看来我没说明白,我的意思是拦截对Dao的操作,是对Dao进行的拦截,拦截不到。

参考技术A 没有看到你的代码不知道你其他地方有没有错误
但就你描述中能发现一点

你的Dao继承自BaseDao 没有实现接口

首先spring的aop的底层是通过动态代理实现的,默认的是使用jdk的动态代理
而jdk的动态代理的类必须实现接口。举个例子
public class StudentDaoImpl implements StudentDao
...

才可以用spring默认的aop进行拦截。

问题找到了解决方案也就出来了。
第一种: 不要通过继承来实现Dao,通过接口。
第二种:spring提供了Cglib来实现aop的底层实现,cglib通过继承来实现动态代理。
使用方法如下,首先,引入cglib库 cglib-nodep-2.1_3.jar。这个不同版本的貌似不一样,找到你那个版本的spring的源代码,引入lib/cglig里面的所有jar。其次,配置spring aop的时候将proxy-target-class的值设置成ture.
配置如下<aop:aspectj-autoproxy proxy-targetclass="true">
</aop:aspectj-autoproxy>

如果还有问题可以给我留言 也可以加我qq把代码发过来。
参考技术B 你需要在AOP配置里面把需要拦截的service的前缀写上

以上是关于Spring aop 拦截不到Dao的主要内容,如果未能解决你的问题,请参考以下文章

spring aop (service通过继承)导致无法拦截子类方法

SpringBoot 基础系列接口上注解 AOP 拦截不到场景兼容实例演示

spring AOP 拦截器实现问题

spring---aop---Spring AOP的拦截器链

spring AOP 拦截器实现问题

SpringMVC中配aop拦截不生效,咋回事