[已解決]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種方法,其它實現方式,可以參考下面的文章:

 

 

往期精彩:

 

 

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