[已解决]Spring aop 使用@Aspect 提示 caused by: java.lang.IllegalArgumentException: error at ::0 can't find

问题描述:

今天使用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种方法,其它实现方式,可以参考下面的文章:

 

 

往期精彩:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章