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

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

通過實例解析Spring argNames屬性

瀏覽:122日期:2023-07-31 17:25:01

最近學習Spring,一直不太明白Srping的切面編程中的的argNames的含義,經過學習研究后,終于明白,分享一下

需要監控的類:

package bean;public class HelloApi { public void aspectTest(String a,String b){ System.out.println('in aspectTest:' + 'a:' + a + ',b:' + b); }}

類HelloApi的aspectTest方法是需監控的方法,目標是調用前獲取獲得入參a和b的值,并打印出來。

切面類:

package aspect;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;import java.lang.String;@Component@Aspectpublic class HelloApiAspect2 { @Pointcut(value='execution(* bean.HelloApi.aspectTest(..)) && args(a1,b2)',argNames='a1,b2') public void pointcut1(String a1,String b2){} @Before(value='pointcut1(a,b)',argNames='a,b') public void beforecase1(String a,String b){ System.out.println('1 a:' + a +' b:' + b); } //注意和beforecase1的區別是argNames的順序交換了 @Before(value='pointcut1(a,b)',argNames='b,a') public void beforecase2(String a,String b){ System.out.println('2 a:' + a +' b:' + b); }}

測試類:

package UnitTest;import org.junit.Assert;import org.junit.Test;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;import bean.HelloApi;public class Test1 { @Test public void aspectjTest1(){ BeanFactory beanFactory = new ClassPathXmlApplicationContext('chapter2/aspectTest1.xml'); HelloApi helloapi1 = beanFactory.getBean('helloapi1',HelloApi.class); helloapi1.aspectTest('a', 'b'); }}

Spring的配置文件aspectTest.xml:

<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:p='http://www.springframework.org/schema/p' xmlns:util='http://www.springframework.org/schema/util' xmlns:context='http://www.springframework.org/schema/context' xmlns:aop='http://www.springframework.org/schema/aop' xsi:schemaLocation='http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd'> <context:component-scan base-package='aspect'></context:component-scan> <bean class='bean.HelloApi'></bean> <aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>

輸出:

2 a:b b:a1 a:a b:bin aspectTest:a:a,b:b

說明:

HelloApiAspect2定義了一個切面pointcut,切面表達式是execution(* bean.HelloApi.aspectTest(..)) && args(a1,b2),表示配對bean.HelloApi.aspectTest()方法,并且傳入參數是2個。

args(a1,b2)另外一個作用,就是定義了aspectTest(String a,String b)方法對應表達式args(a1,b2)。定義了args(a1,b2),才能把目標方法aspectTest的參數傳入到切面方法beforecase1的參數中,a參數對應a1,b參數對應b2。使用的方法是按順序一一對應,aspectTest第一個參數對args第一個參數,aspectTest第2個參數對args第2個參數.

argNames是可選的,如果沒有argNames這個參數,而編譯器設置了【在class文件生成變量調試信息】,則spring可以通過反射知道方法參數的名字,通過名字配對,Spring知道args(a1,b2)表達式里面的a1和b2,對應了pointcut1(String a1,String b2)方法里面的a1和b2。

目標方法和切入方法的參數的關系是這樣確立的:aspectTest(String a,String b) 與 args(a1,b2)關系是a對a1,b對b2(),args(a1,b2)與pointcut1(String a1,String b2)關系是args的a1對pointcut1的a1,args的a2對pointcut1的a2。解決了目標方法參數傳入到切入方法參數的問題。

但是,如果設置了argNames,Spring不再使用方法參數的名字來配對,使用argNames定義的順序來定義pointcut1(String a1,String b2)的順序,例如:argNames='a1,b2',a1在b2前面,表示pointcut1方法第一個參數是a1,第二個參數是b2。

既然不設置argNames,Spring可以根據參數名字進行配對,為什么還需要配置argNames?因為Spring要知道方法的參數名,編譯器必須設置了【在class文件生成變量調試信息】,如果沒有設置,Spring就不知道pointcut1方法的參數名了,這個時候,Spring只知道參數的類型,Spring會使用參數的類型進行配對,如果出現2個參數都是同一個類型的情況,就會報AmbiguousBindingException異常。

beforecase1和beforecase2的argNames設置的順序交換了,調用beforecase1的順序是beforecase1('a','b'),調用beforecase2的順序是beforecase2('b','a'),所以最后的輸出是

2 a:b b:a1 a:a b:b

PS:

【class文件中生成變量調試信息】在myeclipse中打開windows-》preferences,設置如下:

通過實例解析Spring argNames屬性

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精选在线| 免费成人在线观看| 国产欧美自拍| 青草综合视频| 日韩不卡一二三区| 麻豆中文一区二区| www.com.cn成人| 亚洲一级二级| 天堂成人免费av电影一区| 日本一区二区三区视频在线看| 日韩精品免费一区二区夜夜嗨| 午夜亚洲福利| 国产精品综合色区在线观看| 国产精品国产三级国产在线观看| 日韩中文欧美| 中国女人久久久| 91精品日本| 日韩国产综合| 狠狠色狠狠色综合日日tαg| 婷婷综合电影| 日韩成人精品一区| 欧美另类综合| 国产精品伊人| 91精品国产成人观看| 蜜臀久久99精品久久久久宅男| 天海翼精品一区二区三区| 麻豆精品视频在线观看免费| 91欧美日韩| 亚洲欧洲美洲国产香蕉| 成人精品久久| 亚洲网址在线观看| 国产一区精品福利| 国产精品美女| 国产一区不卡| 亚洲精品进入| 国产v综合v| 国产亚洲一区二区三区不卡| 91精品蜜臀一区二区三区在线| 日韩欧美三区| 久久久精品网| 国产精品主播| 欧美日韩高清| 国产精品3区| 免费在线看一区| 美女av在线免费看| 欧美一区二区三区久久| 99成人在线视频| 国产精品免费不| 欧美日韩少妇| 福利视频一区| 91成人在线网站| 99riav1国产精品视频| 精品视频高潮| 日韩av影院| 日韩午夜高潮| 精品国产第一福利网站| 日韩黄色免费网站| 日韩午夜av在线| 欧美三区四区| 精品国产99| 国产亚洲一区二区三区不卡| 日韩中文字幕区一区有砖一区| 久久精品中文| 国产 日韩 欧美 综合 一区| 日韩1区2区3区| 先锋亚洲精品| 免费av一区二区三区四区| 国产91欧美| 国产亚洲电影| 亚洲在线久久| 在线综合亚洲| 久久视频国产| 丝袜诱惑一区二区| 精品久久国产一区| 国产精品一线天粉嫩av| 日韩一区网站| 亚洲三级毛片| 蜜臀精品久久久久久蜜臀 | 亚洲午夜av| 日韩不卡一区| 国产欧洲在线| 高清日韩欧美| 精品美女视频 | 欧美一级专区| 国产高清一区二区| 99精品视频在线| 桃色一区二区| 在线天堂中文资源最新版| 国产精品主播| 国产欧美日韩视频在线| 日本午夜精品久久久久| 中文字幕一区二区三区在线视频| 亚洲欧美日韩专区| 欧美特黄一区| 亚洲激情黄色| 亚洲一区日本| 中文字幕乱码亚洲无线精品一区| 三级在线观看一区二区| 综合精品一区| 奇米亚洲欧美| 国产精品久久| 精品国产乱码| 亚洲伦乱视频| 狠狠久久婷婷| 视频一区国产视频| 日本不卡高清| 久久av影视| 日本久久精品| 成人羞羞在线观看网站| 婷婷亚洲五月色综合| 人人爽香蕉精品| 日本a级不卡| 精品一区二区三区中文字幕视频| 成人台湾亚洲精品一区二区| 伊人久久av| 亚洲一区中文| 青草av.久久免费一区| 麻豆国产欧美一区二区三区| 国产一区2区在线观看| 欧美日韩精品一区二区视频| 亚洲中字黄色| 国产精品中文字幕亚洲欧美 | 综合在线一区| 国产精品第十页| 天堂√8在线中文| 国产精品毛片| 国产精品一区二区av交换| 97精品国产一区二区三区| 激情五月综合| 国产精品日韩精品在线播放| 韩国精品主播一区二区在线观看 | 欧美日本久久| 伊伊综合在线| 亚洲毛片一区| 91中文字幕精品永久在线| 亚洲免费网址| 久久久国产精品入口麻豆| 欧美日韩精品免费观看视完整 | 国产96在线亚洲| 国产亚洲精品自拍| 国产精品一国产精品k频道56| 精品美女久久| 亚洲欧美视频| 精品黄色一级片| 中国女人久久久| 另类综合日韩欧美亚洲| 国产精品毛片在线| 你懂的亚洲视频| 亚洲免费婷婷| 三上亚洲一区二区| 亚洲日本三级| 久久九九电影| 国产毛片一区二区三区| 欧美日韩国产在线观看网站 | 日韩国产在线不卡视频| 日韩欧美网址| 日韩精品91亚洲二区在线观看| 电影天堂国产精品| 欧美天堂在线| 亚洲免费精品| 国产videos久久| 日韩精品导航| 最新亚洲激情| 亚洲精品永久免费视频| 日本视频一区二区| 不卡中文字幕| 国产成人免费av一区二区午夜| 视频一区欧美日韩| 日韩不卡在线| 精品亚洲成人| 青青草国产成人99久久| 最新国产拍偷乱拍精品| 神马午夜在线视频| 国产毛片精品| 日韩一区二区三区在线看| 亚洲午夜91| 天堂av在线| 麻豆精品视频在线| 日韩av网站在线观看| 蜜桃视频在线观看一区二区| 婷婷六月综合| 成人免费网站www网站高清| 国产亚洲精品美女久久久久久久久久| 伊人久久成人| 欧美日韩在线二区| 国产精品精品| 美腿丝袜亚洲一区| 欧美亚洲三区| 日韩av成人高清| 色8久久久久| 一二三区精品| 在线精品一区二区| 水蜜桃久久夜色精品一区的特点| 136国产福利精品导航网址| av最新在线| 神马久久午夜| 神马午夜在线视频| 成人在线免费观看网站| 精品视频99| 精品久久亚洲|