亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

spring top做自定義注解

2019-11-10 17:43:17
字體:
來源:轉載
供稿:網友
這段時間java反將list集合中的bean內容轉換為JSON,返回到瀏覽器前臺,于是想使用注解的方式,對一些特定的需要返回數據的接口進行處理,直接調用反射寫的方法,直接將結果轉換成JSON,于是獲取一下經驗。第一部分,做sPRing的aop 開發1,spring采取兩種方式來處理切入點和增強處理@基于注解的零配置方式:使用@aspect @Pointcut@基于xml配置文件的管理方式:使用Spring配置文件來定義切入點和增強處理2,在spring的配置文件使用<context:component-scan base-package="com.zztaiwll.service,com.zztaiwll.util.annotion">         <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>    </context:component-scan>或者<aop:aspectj-autoproxy/>開啟注解3,修改spring的配置文件,將aop所在的包定位自動掃描的包,這里我們暫定為com.zztaiwll.uitl.annotion
 <context:component-scan base-package="com.zztaiwll.service,com.zztaiwll.util.annotion">         <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/> </context:component-scan>  4,本工程使用的maven,所以引入兩個相關的包,分別是aspectjweaver.jar和aspectjrt.jar    <spring.version>4.0.2.RELEASE</spring.version>        <dependency>            <groupId>aspectj</groupId>            <artifactId>aspectjrt</artifactId>            <version>1.5.4</version>        </dependency>    </dependencies>    <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aop</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aspects</artifactId>            <version>${spring.version}</version>        </dependency>5,定義切入點(1)所謂的定義切入點,實質就是為一個切入點表達式起一個名稱,從而容許在多個增強處理中重用該名稱(2)切入點定義包含兩個部分:    [1]一個切入點表達式    [2]一個包含名字和任意參數的方法簽名例如:@Aspectpublic class demo {@Pointcut("execution(* com.zztaiwll.controller.*.*(..))")public void myPointcut(){};}@Aspectpublic class demoDesc {//直接使用demo切面類的myPointcut切入點    @AfterReturning(returning="rtc",pointcut="demo.myPointcut()")    //聲明 rtc時指定類型會相知目標方法必須返回指定類型的值或者您沒有返回值    public void log(Object rtc){         System.out.println("獲取該函數返回至"+rvt);    }}6,切入點指示符Spring AOP一共支持如下幾種切入點指示符【1】,execution:用于匹配方法的連接點,是springaop的最主要的切入點指示符execution(modifiters-pattern?ret-type-pattern declaring-type-pattern ?name-pattern(param-pattern) throw-pattern)modifiters-pattern:指定方法的修飾符,支持通配符,該部分可以省略ret-type-pattern:指定方法的返回值類型,支持通配符,可以使用*通配符來匹配所有返回值類型declaring-type-pattern:指定方法所屬的類,支持通配符,可省略name-pattern:指定匹配的方法名,支持通配符,可使用*指定所有方法param-pattern:指定方法中的形參列表,支持兩個通配符,即“*”和“..",其中*代表一個人以參數,..代表另個或者多個任意類型的參數throw-pattern:制定方法聲明拋出的異常,支持通配符,可省略如execution(* com.zztaiwll.controller.*.*(..))指的是controller下所有的類中的所有方法【2】,within:用于限定匹配特定類型的連接點,當使用Springaop的時候,智能匹配方法執行的連接點如witnin(com.zztaiwll.controller..*)【3】,this用于限定AOP代理必須是指定類型的實例,匹配該對象的所有連接點。當使用Spring AOP的時候,只能匹配方法的連接點this(com.zztaiwll.controller.UserController)【4】,target:用于限定目標對象必須是指定的類型的實例,匹配該對象所有的連接點,當使用Spring AOP的時候,只能匹配方法的連接點target(com.zztaiwll.controller.UserController)【5】,args:用于對連接點的類型進行限制,要求參數類型是指定類型的實例。當使用Spring AOP的時候,只能匹配方法的連接點args(java.io.Serializable)【6】,bean:用于限定之匹配指定Bean十里內的連接點,實際上只是用方法執行作為連接點bean表達式是需要傳入Bean的id或name,表示只匹配該bean實例內的連接點,支持使用*通配符bean(*service)7,織入點表達式spring支持使用如下三個邏輯運算符來組合切入點表達式【1】&&:要求連接點同時匹配兩個切入點表達式【2】||:滿足任意一個即可【3】!要求連接點不匹配指定的切入點表達式如  @Around(value="execution(* com.zztaiwll.controller.*.*(..))&& @annotation(json)")8,編寫相應的方法{1}Before,After,AfterThrowing,AfterReturning@Component//聲明這是一個切面Bean@Aspectpublic class ServiceAspect {    private final static Log log = LogFactory.getLog(ServiceAspect.class);    //配置切入點,該方法無方法體,主要為方便同類中其他方法使用此處配置的切入點    @Before("execution(* com.zztaiwll.controller.*.*(..))")    public void aspect(JoinPoint jp) throws Throwable{            Object []obj=jp.getArgs();//獲取參數        System.out.println("1111111111111111111111");    }    //(1),pointcut/value:這兩個屬性是一樣的,他們都是用于指定該切入點對應的切入表達式    //(2),returning:該屬性制定一個形參名,用于表示Advice方法中可定義與此同名的形參,該形參用于訪問目標方法的返回值,他可以用于限定切入點之匹配具體對應返回值的方法    @AfterReturning(returning="rvt", pointcut="execution(* com.zztaiwll.controller.*.*(..))")    public Object after(Object rvt){        System.out.println("獲取該函數返回至"+rvt);        return rvt;    }    //(1),pointcut/value:這兩個屬性是一樣的,他們都是用于指定該切入點對應的切入表達式    //(2),throwing:該屬性制定一個形參名,用于表示Advice方法中可定義與此同名的形參,該形參可用于訪問目標方法拋出的異常    @AfterThrowing(throwing="ex",pointcut="execution(* com.zztaiwll.controller.*.*(..))")    public void throwError(Throwable ex){        System.out.println("目標方法拋出異常"+ex);        System.out.println("模擬Advice對異常的修復");    }    //AfterReturning和After的區別    //(1),AfterReturning增強處理只有在目標方法完全成功后才被織入    //(2),After增強處理不管目標方法如何結束,他都會被織入    @After("execution(* com.zztaiwll.controller.*.*(..))")    public void afterS(JoinPoint jp){        Object []obj=jp.getArgs();//獲取參數        System.out.println("模擬方法釋放資源");    }}{2},Around@Around注解用于修飾Around增強處理,它的功能比較強大,他近似等于Before增強處理和AfterReturn增強處理的總和,Around增強處理即可以在執行目標方法之前織入增強動作也可在執行目標方法之后織入增強動作//聲明這是一個組件@Component//聲明這是一個切面Bean@Aspectpublic class ServiceAspect {    private final static Log log = LogFactory.getLog(ServiceAspect.class);    //配置切入點,該方法無方法體,主要為方便同類中其他方法使用此處配置的切入點    @Around(value="execution(* com.zztaiwll.controller.*.*(..))")    public Object aspect(ProceedingJoinPoint pjd, json json) throws Throwable{            Object[] args=pjd.getArgs();//獲取參數        Object rvt=pjd.proceed();//獲取返回結果        return rvt;    }}第二部分,做自定義注解,注意關鍵一點要在spring-servlet.xml中配上<context:component-scan base-package="com.zztaiwll.service,com.zztaiwll.util.annotion">         <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>    </context:component-scan>【1】,配置自定義注解import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)//@Target({ ElementType.METHOD })//public @interface json {}【2】aop實現注解//聲明這是一個組件@Component//聲明這是一個切面Bean@Aspectpublic class ServiceAspect {    private final static Log log = LogFactory.getLog(ServiceAspect.class);    //配置切入點,該方法無方法體,主要為方便同類中其他方法使用此處配置的切入點    @Around(value="execution(* com.zztaiwll.controller.*.*(..))&& @annotation(json)")    public Object aspect(ProceedingJoinPoint pjd, json json) throws Throwable{            Object[] args=pjd.getArgs();        Object rvt=pjd.proceed();        Object objs=StringConvertJSON.toJSON(rvt);        return objs;    }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人中文字幕在线| 在线观看亚洲区| 中文字幕亚洲图片| 精品久久久91| 日本久久91av| 国产91对白在线播放| 国产精品入口日韩视频大尺度| 欧美日韩免费一区| 久热精品视频在线免费观看| 在线色欧美三级视频| 91免费人成网站在线观看18| 国产精品福利无圣光在线一区| 欧美精品videossex性护士| 综合国产在线视频| 国产精品十八以下禁看| www.国产精品一二区| 97香蕉超级碰碰久久免费的优势| 亚洲精品国产免费| 午夜精品美女自拍福到在线| 国产精品视频一| 91久久久亚洲精品| 色噜噜久久综合伊人一本| 久久久久久久久中文字幕| 欧美日韩高清区| 欧美精品videossex88| 国产v综合ⅴ日韩v欧美大片| 久久91亚洲精品中文字幕| 亚洲精品在线观看www| 日韩精品免费一线在线观看| 国产裸体写真av一区二区| 欧美国产精品人人做人人爱| 国产成人久久久精品一区| 欧美大成色www永久网站婷| 国产极品精品在线观看| 欧美大尺度激情区在线播放| 日韩精品电影网| 九九热这里只有在线精品视| 国产日韩精品在线播放| 亚洲理论在线a中文字幕| 亚洲色图综合久久| 久久精品99久久久久久久久| 欧美极品少妇xxxxⅹ喷水| 欧美成人黄色小视频| 亚洲午夜小视频| www日韩中文字幕在线看| 欧美精品成人91久久久久久久| 欧美乱大交做爰xxxⅹ性3| 亚洲精品资源美女情侣酒店| 51色欧美片视频在线观看| 日韩h在线观看| 久久在精品线影院精品国产| 91九色国产视频| 亚洲一区二区三区四区视频| 国产亚洲欧美另类中文| 狠狠色狠色综合曰曰| 九九久久久久久久久激情| 国产精品99久久久久久久久| 国产精品香蕉在线观看| 韩国三级日本三级少妇99| 欧美精品一二区| 亚洲黄页网在线观看| 国产欧美日韩精品在线观看| 国产精品精品久久久久久| 青青久久aⅴ北条麻妃| 久久天天躁夜夜躁狠狠躁2022| 亚洲电影免费观看高清完整版在线观看| 久久久久久亚洲| 91热福利电影| 欧美另类交人妖| 国自在线精品视频| 国产精品久久久久免费a∨| 亚洲精品国产suv| 欧美精品久久久久久久免费观看| 成人国产精品色哟哟| 亚洲影视九九影院在线观看| 久久久999精品免费| 精品视频9999| 国产精品美乳一区二区免费| 成人免费福利视频| 日韩av三级在线观看| 成人激情视频小说免费下载| 琪琪第一精品导航| 国产亚洲精品久久久久久牛牛| 伊人伊成久久人综合网小说| 欧美性生交xxxxx久久久| 国产精品久久久久不卡| 欧美诱惑福利视频| 日韩国产在线看| 亚洲日本成人网| 久久久久久高潮国产精品视| 欧美精品999| 成人久久久久爱| 国模gogo一区二区大胆私拍| 色综合久久久888| 国产精品入口免费视频一| 国产精品91免费在线| 欧美黑人xxxx| 中文字幕亚洲国产| 亚洲美女av黄| 中文字幕成人精品久久不卡| 国产男人精品视频| 992tv在线成人免费观看| 欧美中文在线免费| 韩国19禁主播vip福利视频| 国产精品老牛影院在线观看| 亚洲xxxxx| 久久久在线视频| 欧美孕妇与黑人孕交| 午夜精品在线观看| 欧美激情中文字幕乱码免费| 日韩在线视频二区| 亚洲成av人片在线观看香蕉| 91tv亚洲精品香蕉国产一区7ujn| 国产午夜精品久久久| 日韩中文在线中文网三级| 国产有码一区二区| 国产精品亚洲激情| 在线成人中文字幕| 疯狂做受xxxx高潮欧美日本| 亚洲天堂日韩电影| 日韩av免费在线看| 国产一区二区三区视频免费| 88国产精品欧美一区二区三区| 一本一道久久a久久精品逆3p| 国内精品久久久久伊人av| 亚洲欧美一区二区三区久久| 国模精品视频一区二区| 亚洲国产欧美一区二区三区久久| 欧美性xxxx极品hd满灌| 亚洲国产精彩中文乱码av| 色综合久久久久久中文网| 国产精品日日摸夜夜添夜夜av| 日韩在线免费视频观看| 疯狂欧美牲乱大交777| 福利精品视频在线| 热草久综合在线| 国产婷婷97碰碰久久人人蜜臀| 国产精品久久久av久久久| 夜色77av精品影院| 欧美精品在线播放| 国产精品一二区| 成人午夜小视频| 日韩中文娱乐网| 亚洲成人精品久久久| 国产日韩在线播放| 国产脚交av在线一区二区| 国产精品成人av性教育| 亚洲激情在线观看视频免费| 欧美孕妇与黑人孕交| 78m国产成人精品视频| 欧美日韩一区二区免费视频| 色婷婷av一区二区三区在线观看| 黄色成人av在线| 亚洲成色999久久网站| 日日狠狠久久偷偷四色综合免费| 国产精品一区av| 国产亚洲a∨片在线观看| 欧美一级bbbbb性bbbb喷潮片| 国产欧美精品va在线观看| 久久韩国免费视频| 亚洲欧美日韩天堂| 久久精品国产亚洲精品| 国产精品日韩电影| 国产成人中文字幕|