欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

定義需要切面的注解

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

在需要進行切面的方法標注注解

@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;
? ? }
}

定義切面

在切面中獲取切點注解,方法,參數(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();
        //獲取注解標注的方法
        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("進入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); ? ?
? ? ......
}

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

相關文章

  • Java實現(xiàn)獲取指定個數(shù)的不同隨機數(shù)

    Java實現(xiàn)獲取指定個數(shù)的不同隨機數(shù)

    今天小編就為大家分享一篇關于Java實現(xiàn)獲取指定個數(shù)的不同隨機數(shù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • dubbo新手學習之事件通知實踐教程

    dubbo新手學習之事件通知實踐教程

    這篇文章主要給大家介紹了關于dubbo新手學習之事件通知實踐的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • java類的加載過程以及類加載器的分析

    java類的加載過程以及類加載器的分析

    這篇文章給大家詳細講述了java類的加載過程以及類加載器的相關知識點內(nèi)容,有需要的朋友可以學習下。
    2018-08-08
  • java開發(fā)接口吞吐量提升10多倍技巧

    java開發(fā)接口吞吐量提升10多倍技巧

    這篇文章主要為大家介紹了java開發(fā)技巧之接口吞吐量提升10多倍的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • java this的應用方法解析

    java this的應用方法解析

    這篇文章主要介紹了java this的應用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • springbooot整合dynamic?datasource數(shù)據(jù)庫密碼加密方式

    springbooot整合dynamic?datasource數(shù)據(jù)庫密碼加密方式

    這篇文章主要介紹了springbooot整合dynamic?datasource?數(shù)據(jù)庫密碼加密方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java判斷是否為閏年的方法示例

    Java判斷是否為閏年的方法示例

    這篇文章主要介紹了Java判斷是否為閏年的方法示例,本文直接給出示例代碼,并講解了判斷原理,需要的朋友可以參考下
    2015-06-06
  • Java使用百度AI接口實現(xiàn)智能機器人對話系統(tǒng)

    Java使用百度AI接口實現(xiàn)智能機器人對話系統(tǒng)

    AI已經(jīng)在各行各業(yè)中廣泛應用,助力于各式各樣的業(yè)務,而在機器人對話中,我們可以通過利用百度AI中的自然語言處理、問答知識圖譜等技術,使機器人可以更加智能化、自然化的為用戶服務,本文介紹Java利用百度AI接口實現(xiàn)智能機器人對話系統(tǒng)
    2024-01-01
  • springboot業(yè)務功能實戰(zhàn)之告別輪詢websocket的集成使用

    springboot業(yè)務功能實戰(zhàn)之告別輪詢websocket的集成使用

    WebSocket使得客戶端和服務器之間的數(shù)據(jù)交換變得更加簡單,允許服務端主動向客戶端推送數(shù)據(jù),下面這篇文章主要給大家介紹了關于springboot業(yè)務功能實戰(zhàn)之告別輪詢websocket的集成使用,需要的朋友可以參考下
    2022-10-10
  • Java基礎之多線程的三種實現(xiàn)方式

    Java基礎之多線程的三種實現(xiàn)方式

    這篇文章主要介紹了Java基礎之多線程的三種實現(xiàn)方式,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評論