日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談Spring AOP中args()和argNames的含義

瀏覽:27日期:2023-07-04 08:42:27
args()的作用主要有兩點:

1、切入點表達式部分如果增加了args()部分,那么目標方法除了要滿足execution部分,還要滿足args()對方法參數的要求,對于符合execution表達式,但不符合args參數的方法,不會被植入切面。

2、定義了args()之后,才能把目標方法的參數傳入到切面方法的參數中(通過Joinpoint也可以獲取參數,但當前方法是直接用切面方法參數接受)。

示例1

目標方法:

@RestController@RequestMapping('/testAop')public class TestController { private Logger logger = LoggerFactory.getLogger(TestController.class); @RequestMapping('/helloworld') public String helloWorld(String id, Integer age){System.out.println('被代理方法正在執行');return null; }}

切面方法

@After('execution(* com.bxp.controller.TestController.*(..)) && args(userId, userAge)') public void after(JoinPoint point, String userId, Integer userAge){System.out.println('userId===========' + userId);System.out.println('userAge===========' + userAge); }

輸出結果:

被代理方法正在執行userId===========bian1996userAge===========24

定義了args(userId, userAge)才能把目標方法helloWorld(String id, Integer age)的參數傳入到增強處理方法after的參數中,id參數對應userId,age參數對應userAge。使用的方法是按順序一一對應,helloWorld第一個參數對args第一個參數,helloWorld第2個參數對args第2個參數。

切入點表達式部分增加了&&args(userId, userAge)部分,意味著可以在增強處理方法中定義userId、userAge兩個形參------定義這兩個形參時,形參類型可以隨意指定,但是一旦指定,譬如這里分別是String類型和Integer類型,這兩個形參類型將用于限制該切入點只匹配第一個參數類型為String,第二個參數類型為Integer的方法。

也就是,args()中的參數會和目標方法的參數除了在順序上一一對應之外,在類型上也要對應,否則匹配失敗,如下兩種情況都會匹配失敗。

@RequestMapping('/helloworld')public String helloWorld(Integer id, Integer age){ System.out.println('被代理方法正在執行'); return null;} @After('execution(* com.bxp.controller.TestController.*(..)) && args(userId, userAge)')public void after(JoinPoint point, String userId, String userAge){ System.out.println('userId===========' + userId); System.out.println('userAge===========' + userAge);}@RequestMapping('/helloworld')public String helloWorld(Integer sex, String id, Integer age){ System.out.println('被代理方法正在執行'); return null;} @After('execution(* com.bxp.controller.TestController.*(..)) && args(userId, userAge)') public void after(JoinPoint point, String userId, Integer userAge){ System.out.println('userId===========' + userId); System.out.println('userAge===========' + userAge); }

除此之外,使用args()表達式時還可使用如下形式:args(userId, userAge,..),這表明增強處理方法中可以通過userId, userAge來訪問目標方法的參數。注意上面args表達式括號中的2點,它表示可以匹配更多參數,但是只要前兩個userId, userAge參數匹配上了,目標方法就可以被匹配上。

argNames是可選的,如果沒有argNames這個參數,而編譯器設置了【在class文件生成變量調試信息】,則spring可以通過反射知道方法參數的名字,通過名字配對,Spring知道args(userId, userAge)表達式里面的userId和userAge,對應了增強方法public void after(JoinPoint point, String userId, Integer userAge)方法里面的userId和userAge,就是第一個示例的情況:

總結:

目標方法和args()通過參數順序一一進行匹配

args()和增強方法通過參數名稱一致進行匹配。

但是,如果設置了argNames,Spring不再使用方法參數的名字來配對,使用argNames定義的順序來給

after(JoinPoint point, String userAge, String userId)的參數傳值,例如:argNames='userId,userAge',userId在userAge前面,表示after方法第一個參數(JoinPoint 除外)是userId,第二個參數是userAge,示例如下:

目標方法

@RequestMapping('/helloworld')public String helloWorld(String id, String age){ System.out.println('被代理方法正在執行'); return null;}

切面方法

@After(value = 'execution(* com.bxp.controller.TestController.*(..)) && args(userId, userAge)', argNames = 'userId,userAge')public void after(JoinPoint point, String userAge, String userId){ System.out.println('userId===========' + userId); System.out.println('userAge===========' + userAge);}

請求連接和輸出結果

請求連接http://localhost:8088/testAop/helloworld?age=24&id=bian1996輸出結果被代理方法正在執行userId===========24userAge===========bian1996注意:這一次兩個參數的類型都給成String類型了

總結:

目標方法和args()通過參數順序一一進行匹配

args()和argNames通過參數名稱一致進行匹配

argNames和增強方法通過參數順序一一對應。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本欧美韩国一区三区| 秋霞影院一区二区三区| 日韩视频一区| 伊人精品在线| 亚洲一级在线| 综合亚洲自拍| 日韩精彩视频在线观看| 久久精品99久久久| 国产精品一区二区三区www| 国产精品激情| 国产精品美女在线观看直播| 国产精品玖玖玖在线资源| 精品免费在线| 激情久久久久久久| 国产精品日本| 日韩动漫一区| 国产一区二区三区四区二区| 日本精品黄色| 欧美午夜精品一区二区三区电影| 美女少妇全过程你懂的久久| 石原莉奈在线亚洲二区| 日本a级不卡| 国产成人免费精品| 99久久精品网| 一区二区亚洲视频| 欧美在线观看天堂一区二区三区| 国产极品嫩模在线观看91精品| 麻豆中文一区二区| 欧美日韩在线播放视频| 国产精品普通话对白| 91成人小视频| 黄色网一区二区| 欧美69视频| 日本欧美韩国一区三区| 欧美少妇精品| 久久国产精品毛片| 国产私拍福利精品视频二区| 黄色在线网站噜噜噜| 国产高清一区| 91精品国产一区二区在线观看| 精品女同一区二区三区在线观看| 99久久精品国产亚洲精品| 亚洲精品乱码日韩| 精品欧美日韩精品| 国产亚洲一区在线| 国产精东传媒成人av电影| 日韩欧美少妇| 日韩不卡手机在线v区| 欧美aa一级| 日韩精彩视频在线观看| 欧美二三四区| 亚洲精品一区二区在线播放∴| 久久精品国产久精国产爱| 国产99久久久国产精品成人免费| 日韩综合一区二区| 国产v日韩v欧美v| 日韩在线卡一卡二| 国产一区二区三区四区五区传媒| 亚洲综合欧美| 日韩av在线播放网址| 亚洲精品少妇| 亚洲不卡系列| 国产精品亚洲人成在99www| 精精国产xxxx视频在线野外| 日本不卡视频一二三区| 欧美日韩在线二区| 欧美激情福利| 一区二区精品| 久久高清免费| 国产精品777777在线播放 | 免费人成黄页网站在线一区二区| 麻豆久久久久久| 在线精品亚洲| 91精品久久久久久久久久不卡| 欧美日韩va| 99热免费精品| 久久免费高清| 麻豆精品蜜桃视频网站| 免费成人在线观看| 久久久久久久久久久妇女| 国产情侣一区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 在线视频日韩| | 超碰超碰人人人人精品| 欧美久久精品| 综合精品一区| 中文亚洲免费| 亚洲午夜久久久久久尤物| 欧美1区2区3| 欧美在线观看天堂一区二区三区| 久热精品在线| 色婷婷狠狠五月综合天色拍| 国产精品www994| 美国欧美日韩国产在线播放| 精品国产亚洲一区二区三区在线| 日本美女一区| 亚洲精品日韩久久| 亚洲午夜黄色| 99久久激情| 欧美一区二区性| 中文字幕亚洲影视| 三级欧美在线一区| 国产日韩在线观看视频| 亚洲黄色在线| 精品视频一区二区三区在线观看| 激情综合五月| 欧美日韩99| 欧美日韩一二三四| 日韩成人高清| 日本欧美大码aⅴ在线播放| 精品视频一区二区三区在线观看 | 丝袜诱惑一区二区| 激情黄产视频在线免费观看| 欧美亚洲自偷自偷| 成人啊v在线| 日本在线一区二区三区| 国产成人精品免费视| 免费一二一二在线视频| 欧美精品二区| 欧美a级片一区| 久久亚洲欧洲| 在线精品小视频| 国产精品一级| 午夜亚洲福利| 极品日韩av| 国产91欧美| 欧美手机在线| 伊伊综合在线| 欧美永久精品| 日韩福利一区| 中文字幕高清在线播放| 亚洲日韩中文字幕一区| 日韩中文字幕在线一区| 国产精品久久乐| 一本一道久久a久久| 欧美一级网址| 蜜桃视频一区二区三区在线观看| 麻豆网站免费在线观看| 国产一区二区三区四区| 日韩福利视频一区| 一本一道久久a久久精品蜜桃| 亚洲精品伊人| 精品久久久网| 日韩中文视频| 日本欧美一区| 欧美高清一区| 欧美另类中文字幕 | 日本在线一区二区三区| 国产乱码精品一区二区三区四区| 美女毛片一区二区三区四区| 高清久久一区| 欧美自拍一区| 丝袜美腿亚洲一区二区图片| 精品三级在线观看视频| 久久影院一区二区三区| 久久香蕉精品香蕉| 三上悠亚国产精品一区二区三区| 好看的av在线不卡观看| 丝袜国产日韩另类美女| 日韩在线成人| 麻豆精品在线| 999国产精品永久免费视频app| 欧美日韩国产在线一区| 亚洲精品免费观看| 久久中文字幕一区二区| 欧美sss在线视频| 日韩中文字幕麻豆| 国产精品v日韩精品v欧美精品网站 | 日本精品久久| 麻豆一区二区在线| 国产精品91一区二区三区| 免费在线视频一区| 麻豆精品新av中文字幕| 欧美性感美女一区二区 | 日韩专区在线视频| 麻豆精品国产91久久久久久| 99久久久国产精品美女| 日本午夜精品久久久| 精品成av人一区二区三区| 日韩视频免费| 久久99性xxx老妇胖精品| 久久久久中文| 日韩不卡免费视频| 欧美日韩中文一区二区| 国产精品亚洲四区在线观看| 亚洲高清毛片| 国产精品magnet| 亚洲欧美日韩一区在线观看| 美女视频免费精品| 免费观看久久久4p| 欧美aa一级| 国产欧美一区| 免费日韩av| 精品一区二区三区免费看| 日韩视频在线一区二区三区 | 日韩高清国产一区在线| 91视频一区| 午夜av不卡| 国产免费av国片精品草莓男男|