最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于aop切面 注解、參數(shù)如何獲取

 更新時(shí)間:2022年01月11日 09:38:53   作者:筏鏡  
這篇文章主要介紹了關(guān)于aop切面 注解、參數(shù)如何獲取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

aop切面 注解、參數(shù)如何獲取

在工作中會(huì)經(jīng)常使用aop,這里將aop使用基本方法,獲取在切點(diǎn)中使用的獲取參數(shù)、注解做一個(gè)樣例。

定義需要切面的注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AnnDemo {
? ? String value();
? ? boolean isAop() default true;
}

在需要進(jìn)行切面的方法標(biāo)注注解

@RestController
@RequestMapping("/order")
public class OrderController {
? ? @Autowired
? ? private OrderService orderService;
? ? @RequestMapping("/all")
? ? @AnnDemo(value = "all",isAop = false)
? ? public List<TbOrder> findAll() {
? ? ? ? List<TbOrder> list = orderService.getOrderList();
? ? ? ? return list;
? ? }
? ? @RequestMapping("/page")
? ? @AnnDemo(value = "page")
? ? public List<TbOrder> findPage(@RequestParam("username") String username) {
? ? ? ? List<TbOrder> listPage = orderService.getOrdersListPage();
? ? ? ? return listPage;
? ? }
}

定義切面

在切面中獲取切點(diǎn)注解,方法,參數(shù)的獲取

@Aspect
@Component
public class AspectDemo {
    @Pointcut(value = "execution(* com.yin.freemakeradd.controller..*(..))")
    public void excetionMethod() {}
    @Pointcut(value = "execution(* com.yin.freemakeradd.controller..*(..)) && @annotation(AnnDemo)")
    public void excetionNote() { }
    @Before("excetionMethod()")
    public void testBefore(JoinPoint joinPoint) {
        System.out.println("----------------------------前置通知---");
        Object[] args = joinPoint.getArgs();
        for (Object arg : args) {
            System.out.println(arg);
        }
    }
    @Around(value = "execution(* com.yin.freemakeradd.controller..*(..)) && @annotation(AnnDemo)")
    public Object  testBeforeNote(ProceedingJoinPoint joinPoint) throws Throwable {
        //用的最多通知的簽名
        Signature signature = joinPoint.getSignature();
        MethodSignature msg=(MethodSignature) signature;
        Object target = joinPoint.getTarget();
        //獲取注解標(biāo)注的方法
        Method method = target.getClass().getMethod(msg.getName(), msg.getParameterTypes());
        //通過方法獲取注解
        AnnDemo annotation = method.getAnnotation(AnnDemo.class);
        Object proceed;
        //獲取參數(shù)
        Object[] args = joinPoint.getArgs();
        System.out.println(annotation.value());
        System.out.println(annotation.isAop());
        for (Object arg : args) {
            System.out.println(arg);
        }
        if (Objects.isNull(annotation) || !annotation.isAop()) {
            System.out.println("無需處理");
            proceed = joinPoint.proceed();
        }else {
            System.out.println("進(jìn)入aop判斷");
            proceed = joinPoint.proceed();
            if(proceed instanceof List){
                List proceedLst = (List) proceed;
                if(!CollectionUtils.isEmpty(proceedLst)){
                    TbOrder tbOrder = new TbOrder();
                    tbOrder.setPaymentType("fffffffffffffffffff");
                    ArrayList<TbOrder> tbOrderLst = new ArrayList<>();
                    tbOrderLst.add(tbOrder);
                    return tbOrderLst;
                }
            }
            System.out.println(proceed);
        }
        return proceed;
    }
}

aop中獲取自定義注解的屬性值

自定義注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SystemLog {
?
?? ?public String description() default "";
}

用在方法上

@ResponseBody
@ValidRequestBody
@RequestMapping("/login")
@SystemLog(description="登錄")
public GlobalResponse login(@RequestBody @Valid User user, BindingResult bindingResult){
? ? ......
}

獲取注解的屬性值

@Around("@annotation(com.xxx.xxx.xxx.SystemLog)")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
? ? SystemLog systemLog = ((MethodSignature)joinPoint.getSignature()).getMethod().getAnnotation(SystemLog.class); ? ?
? ? ......
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 守護(hù)線程_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java 守護(hù)線程_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java語言機(jī)制是構(gòu)建在JVM的基礎(chǔ)之上的,意思是Java平臺(tái)把操作系統(tǒng)的底層給屏蔽起來,所以它可以在它自己的虛擬的平臺(tái)里面構(gòu)造出對(duì)自己有利的機(jī)制,而語言或者說平臺(tái)的設(shè)計(jì)者多多少少是收到Unix思想的影響,而守護(hù)線程機(jī)制又是對(duì)JVM這樣的平臺(tái)湊合,于是守護(hù)線程應(yīng)運(yùn)而生
    2017-05-05
  • Java線程間通信不同步問題原理與模擬實(shí)例

    Java線程間通信不同步問題原理與模擬實(shí)例

    這篇文章主要介紹了Java線程間通信不同步問題,結(jié)合實(shí)例形式分析了java線程間通信不同步問題的原理并模擬實(shí)現(xiàn)了線程間通信不同步情況下的異常輸出,需要的朋友可以參考下
    2019-10-10
  • java中Hutool包的常用方法總結(jié)

    java中Hutool包的常用方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了java在工作中中Hutool包的一些常用方法總結(jié),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Java基礎(chǔ)之代理原理與用法詳解

    Java基礎(chǔ)之代理原理與用法詳解

    這篇文章主要介紹了Java基礎(chǔ)之代理原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了java代理的概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Java中覆蓋finalize()方法實(shí)例代碼

    Java中覆蓋finalize()方法實(shí)例代碼

    這篇文章主要介紹了Java中覆蓋finalize()方法實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java Volatile關(guān)鍵字你真的了解嗎

    Java Volatile關(guān)鍵字你真的了解嗎

    這篇文章主要為大家介紹了Java Volatile關(guān)鍵字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Java去掉字符串最后一個(gè)逗號(hào)的方法

    Java去掉字符串最后一個(gè)逗號(hào)的方法

    Java中去掉字符串的最后一個(gè)逗號(hào)有多種實(shí)現(xiàn)方法,不同的方法適用于不同的場(chǎng)景,本文通過實(shí)例代碼介紹Java去掉字符串最后一個(gè)逗號(hào)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2023-12-12
  • java正則表達(dá)式匹配規(guī)則超詳細(xì)總結(jié)

    java正則表達(dá)式匹配規(guī)則超詳細(xì)總結(jié)

    正則表達(dá)式并不僅限于某一種語言,但是在每種語言中有細(xì)微的差別,下面這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式匹配規(guī)則的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 小白教程! Linux服務(wù)器上JDK安裝配置方法

    小白教程! Linux服務(wù)器上JDK安裝配置方法

    這篇文章主要為大家詳細(xì)介紹了Linux服務(wù)器上JDK安裝配置方法,小白教程!具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 常用校驗(yàn)注解之@NotNull,@NotBlank,@NotEmpty的區(qū)別及說明

    常用校驗(yàn)注解之@NotNull,@NotBlank,@NotEmpty的區(qū)別及說明

    這篇文章主要介紹了常用校驗(yàn)注解之@NotNull,@NotBlank,@NotEmpty的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論

旬邑县| 石楼县| 景宁| 隆德县| 远安县| 嘉义市| 荆门市| 广东省| 灵寿县| 广西| 镇坪县| 寿阳县| 鹿泉市| 顺平县| 特克斯县| 红桥区| 杂多县| 开平市| 南宁市| 浏阳市| 额尔古纳市| 阜阳市| 忻州市| 察哈| 弥渡县| 永州市| 祁门县| 海淀区| 崇信县| 蒲江县| 榆树市| 贡觉县| 黄浦区| 尼木县| 南安市| 藁城市| 惠来县| 达尔| 南丰县| 稷山县| 蓬溪县|