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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring-AOP @AspectJ切点函数之@annotation()

發(fā)布時(shí)間:2025/3/21 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring-AOP @AspectJ切点函数之@annotation() 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • @annotation()概述
  • 實(shí)例

@annotation()概述

@annotation表示標(biāo)注了某個(gè)注解的所有方法。

下面通過(guò)一個(gè)實(shí)例說(shuō)明@annotation()的用法。 AnnotationTestAspect定義了一個(gè)后置切面增強(qiáng),該增強(qiáng)將應(yīng)用到標(biāo)注了NeedTest的目標(biāo)方法中。


實(shí)例

代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster

首先我們先自定義一個(gè)注解@NeedTest。

如何自定義注解請(qǐng)參考Java-Java5.0注解解讀

package com.xgj.aop.spring.advisor.aspectJ.function;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** * * @ClassName: NeedTest* * @Description: 自定義注解@NeedTest* * @author: Mr.Yang* * @date: 2017年8月26日 下午11:19:12*/// 聲明注解的保留期限 @Retention(RetentionPolicy.RUNTIME) // 聲明可以使用該注解的目標(biāo)類型 @Target(ElementType.METHOD) @Documented public @interface NeedTest {// 聲明注解成員boolean value() default false; }

下面我們定義接口 Waiter

package com.xgj.aop.spring.advisor.aspectJ.function;public interface Waiter {public void greetTo(String clientName);public void serverTo(String clientName); }

接口實(shí)現(xiàn)類 兩個(gè)NaiveWaiter 和 NaughtWaiter

package com.xgj.aop.spring.advisor.aspectJ.function;public class NaiveWaiter implements Waiter {@NeedTest(true)@Overridepublic void greetTo(String clientName) {System.out.println("NaiveWaiter:greet to " + clientName);}@Overridepublic void serverTo(String clientName) {System.out.println("NaiveWaiter:server to " + clientName);}public void smile(String clientName, int times) {System.out.println("NaiveWaiter:smile to " + clientName + " " + times+ " times");} } package com.xgj.aop.spring.advisor.aspectJ.function;public class NaughtWaiter implements Waiter {@Overridepublic void greetTo(String clientName) {System.out.println("NaughtWaiter:greet to " + clientName);}@NeedTest(true)@Overridepublic void serverTo(String clientName) {System.out.println("NaughtWaiter:server to " + clientName);}public void joke(String clientName, int times) {System.out.println("NaughtyWaiter:play " + times + " jokes to "+ clientName);} }

我們可以看到 NaiveWaiter#greetTo()方法標(biāo)注了@NeedTest, NaughtWaiter#serverTo()也標(biāo)注了@NeedTest,我們的目標(biāo)就是將后置增強(qiáng)織入到這兩個(gè)標(biāo)注了@NeedTest的方法中。


接下來(lái)編寫(xiě)切面的橫切邏輯

package com.xgj.aop.spring.advisor.aspectJ.function.annotationFun;import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect;/*** * * @ClassName: AnnotationTestAspect* * @Description: 切面 、 后置增強(qiáng) ,@annotation表示標(biāo)注了某個(gè)注解的所有方法* * @author: Mr.Yang* * @date: 2017年8月26日 下午11:23:53*/@Aspect public class AnnotationTestAspect {@AfterReturning("@annotation(com.xgj.aop.spring.advisor.aspectJ.function.NeedTest)")public void needTest() {System.out.println("needTest() executed,some logic is here");}}

接下來(lái)通過(guò)Spring自動(dòng)應(yīng)用切面,配置文件如下

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 使用基于Schema的aop命名空間進(jìn)行配置 --><!-- 基于@AspectJ切面的驅(qū)動(dòng)器 --> <aop:aspectj-autoproxy/><!-- 目標(biāo)Bean --> <bean id="naiveWaiter" class="com.xgj.aop.spring.advisor.aspectJ.function.NaiveWaiter"/><bean id="naughtWaiter" class="com.xgj.aop.spring.advisor.aspectJ.function.NaughtWaiter"/><!-- 使用了@AspectJ注解的切面類 --> <bean class="com.xgj.aop.spring.advisor.aspectJ.function.annotationFun.AnnotationTestAspect"/></beans>

最后編寫(xiě)測(cè)試代碼:

package com.xgj.aop.spring.advisor.aspectJ.function.annotationFun;import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;import com.xgj.aop.spring.advisor.aspectJ.function.Waiter;public class AnnotationTestAspcetTest {@Testpublic void test() {ApplicationContext ctx = new ClassPathXmlApplicationContext("com/xgj/aop/spring/advisor/aspectJ/function/annotationFun/conf-annotation.xml");// 必須是接口類型,否則拋類型轉(zhuǎn)換異常Waiter waiter = (Waiter) ctx.getBean("naiveWaiter");// 因?yàn)間reetTo標(biāo)注了@NeedTest,因此會(huì)被后置增強(qiáng)waiter.greetTo("XiaoGongJiang");waiter.serverTo("XiaoGongJiang");Waiter naughtWaiter = (Waiter) ctx.getBean("naughtWaiter");// serverTo標(biāo)注了@NeedTest,因此會(huì)被后置增強(qiáng)naughtWaiter.serverTo("XiaoGongJiang");} }

運(yùn)行結(jié)果:

2017-08-27 01:24:22,551 INFO [main] (AbstractApplicationContext.java:583) - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6ac604: startup date [Sun Aug 27 01:24:22 BOT 2017]; root of context hierarchy 2017-08-27 01:24:22,647 INFO [main] (XmlBeanDefinitionReader.java:317) - Loading XML bean definitions from class path resource [com/xgj/aop/spring/advisor/aspectJ/function/annotationFun/conf-annotation.xml] NaiveWaiter:greet to XiaoGongJiang needTest() executed,some logic is here NaiveWaiter:server to XiaoGongJiang NaughtWaiter:server to XiaoGongJiang needTest() executed,some logic is here

從輸出結(jié)果中可以看出,切面被正確的織入到了標(biāo)注有@NeedTest注解的方法中。

總結(jié)

以上是生活随笔為你收集整理的Spring-AOP @AspectJ切点函数之@annotation()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 台湾a级片 | 国产精品一区二区亚洲 | 国产91精品久久久久久久 | 中文字幕18页 | 国产日韩视频一区 | 成人国产精品一区二区 | 自拍偷拍第5页 | 欧洲自拍一区 | 成人一区二区免费视频 | 久久国产经典 | 黄色一级片在线看 | 亚洲精品国产美女 | 国精产品一二三区精华液 | 日韩一区欧美一区 | 91成人亚洲| 操操日日 | 欧美在线视频免费播放 | 成人激情免费视频 | 日韩精品高清在线 | 蜜桃精品一区二区 | 久久激情网| 在线观看中文字幕视频 | 日韩高清免费观看 | 亚洲激情社区 | 亚洲视频在线观看一区二区三区 | 日韩精品h | 亚洲午夜免费视频 | 韩国精品视频在线观看 | 午夜伦伦| 亚洲 欧美 视频 | 国产精品成人久久久 | 男人天堂一区二区 | 伊人22综合 | 婷婷色激情 | xxxwww黄色 | 亚洲一区二区日韩欧美 | 青青伊人av| av永久 | 九九九网站 | 色五丁香| 精品一区在线观看视频 | 亚洲社区一区二区 | 国产91沙发系列 | 欧美成人69 | 亚洲h视频在线观看 | 国产精品一区二区久久国产 | 成人国产精品免费 | 国产精品免费视频一区二区 | 日韩中文字幕免费在线观看 | 少妇精品视频 | 国模精品视频一区二区 | 成人午夜av在线 | 69精品人人人人 | 日本一区二区免费看 | 怡红院一区二区 | 91porny九色91啦中文 | 91国产视频在线播放 | 在线亚洲人成电影网站色www | 4438亚洲 | 黄色小视频在线免费看 | 又大又硬又爽免费视频 | 91视频www| 欧美射图 | 国产精品19乱码一区二区三区 | 免费看爱爱视频 | 亚洲一本在线观看 | 96亚洲精品久久久蜜桃 | 校园春色综合网 | 免费一级欧美片在线播放 | 国产黄色大片在线观看 | 欧美天堂一区 | 久久久久久久久久久国产精品 | 奇米影视在线播放 | 红桃视频一区二区三区免费 | 国产夜夜操 | 欧美色图激情小说 | 日韩一级免费视频 | 草逼国产 | 91久久精品国产91性色69 | 欧美黄色影院 | 色午夜av | 亲女禁h啪啪宫交 | 欧美性天天 | 网站av在线 | 成人短视频在线免费观看 | 天天天天天天天干 | 亚洲一区二区91 | 国产精品制服诱惑 | 高h大肚孕期孕妇play | 国产在线观看a | 色哟哟在线视频 | 久久高清无码视频 | 夜夜嗨av色一区二区不卡 | 蜜臀久久 | 91精产品一区观看 | 中文字幕11页中文字幕11页 | 亚洲人成色777777精品音频 | 亚洲欧美激情在线观看 | 亚洲乱妇老熟女爽到高潮的片 |