問題描述:
今天使用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包?