日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring aop 中@annotation()和自定义注解的使用

發布時間:2025/3/12 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring aop 中@annotation()和自定义注解的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在自定義個注解之后,通過這個注解,標注需要切入的方法,同時把需要的參數傳到切面去。那么我們怎么在切面使用這個注解。
我們使用這個自定義注解一方面是為了傳一些參數,另一方面也是為了省事。
具體怎么省事,看我下面的例子就造啦。

一般,別人的切面都是這么寫的
先聲明一個切入點。

//切入點簽名@Pointcut("execution(* com.lxk.spring.aop.annotation.PersonDaoImpl.*(..))")private void aa() {}

切入點聲明OK之后,就是在不同的 advice 里面使用啦。一般都是如下使用。
暫時是不帶注解的

//前置通知 @Before("aa()")//后置通知 @AfterReturning(value = "aa()", returning = "val") public void afterMethod(JoinPoint joinPoint, Object val) {}//最終通知 @After("aa()")//環繞通知 @Around("aa()")//異常通知 @AfterThrowing(value = "aa()", throwing = "ex") public void throwingMethod(Throwable ex) {}

這些切面方法里面的參數。JoinPoint joinPoint,這個是哪個都可以加的。加不加隨意。需要的話就加。是可以用的。

要是帶個咱自定義的注解呢
我又看到很多人都是如下寫的。
我就不全部帶上了,就以這個after為例,看看是如何寫的吧

@After(value = "aa() && @annotation(methodLog)", argNames = "joinPoint, methodLog") public void methodAfter(JoinPoint joinPoint, MethodLog methodLog) throws Throwable {}

按照上面這寫,沒毛病,因為別人都是這么寫的,我也確實驗證啦,這個能拿到咱定義的注解,以及注解上的參數。

還有個寫法,就是不用顯示的聲明切入點,就是那個@Pointcut

先說下這個顯示聲明的好處,就像聲明變量一樣,因為這個切入點表達式是可以用 && || !來組合條件的,這么聲明的話,可以使得代碼簡潔。
直接在各類 advice 通知的參數上面,使用execution來聲明。
例如:

@Around(value = "(execution(* com.lxk.service..*(..))) && @annotation(methodLog)", argNames = "joinPoint, methodLog") public Object methodAround(ProceedingJoinPoint joinPoint, MethodLog methodLog) throws Throwable {}

其實,上面的value里面的意思,就是復合那個切入的點的條件, 以&&連接,也就是說2個都符合。
既然咱自定義了注解,就是來干這個切面的,為啥還要對他是哪個包,要限制一下呢,我就把前面的給刪除啦。
最終簡化如下:

@Around(value = "@annotation(methodLog)") public Object methodAround(ProceedingJoinPoint joinPoint, MethodLog methodLog) throws Throwable {}

代碼依然正常運行。

既然不用加那個包的限制,這切面還是OK的,為啥還要加呢?

我稍微考慮下,估計是這么個原因:

自定義注解命名的時候,可能你取的名字很大眾化,其他的jar包,也就是你項目引入的jar包,可能有重名的注解,如果要是不加包限制的話,那估計就會出現意想不到的效果。所以,我們就看到,那么多的切面代碼,這地方的寫法都是千篇一律 都是使用 && 符號。限制包,然后限制使用的是哪個注解。

總結

以上是生活随笔為你收集整理的spring aop 中@annotation()和自定义注解的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。