问题描述:
今天使用spring AOP 实现日志拦截的时候,提示下面的报错:
caused by: java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut peforms
at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:319)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression
问题解决:
找了很久都没有找到解决方法,已开始我以为是springframework版本和 aspectj版本不对应, 但是查找资料后,二者是没有对应关系的, 坑爹了!
于是查了很久的资料,解决方法一般是这2个:
1.JDK版本与 aspectj版本不对应,大部分资料都显示对应关系是:
如果要使用AspectJ完成注解切面需要注意下面的JDK与AspectJ的匹配:
JDK1.6 —— aspectJ1.6
JDK1.7 —— aspectJ1.7.3+
但是这个方法对我无效,试了很久都不行, 于是我就检查是不是pointCut定义有误。
2.检查切点表达式是否有误, 我是多了一个点
@Pointcut("execution(* com.xxx.xxx.xxx.xxxx.service.impl..*.*(..))")
改成@Pointcut("execution(* com.xxx.xxx.xxx.xxx.service.impl.*.*(..))")
检查spring xml 配置是否有加上自动代理 <aop:aspectj-autoproxy />
问题延伸:
spring aop 学习和实践,可以下面的这篇文章,挺详细的,aop 一共有4种实现方式。
1.经典的基于代理的AOP
2.@AspectJ注解驱动的切面
3.纯POJO切面(纯粹通过<aop:config>标签配置)
4.注入式AspectJ切面
我们这里用到的是第2种方法,其它实现方式,可以参考下面的文章:
往期精彩:
- [已解决]N天后的时间戳比当前时间戳小的问题
- (已解决)tomcat7以上,ajax post参数后台获取不到的问题
- 深入浅出OAUTH2.0
- 执行jar脚本时提示nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.xxxx.xx
- eclipse maven 引入本地项目还是jar包?