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

Spring Aop 如何獲取參數(shù)名參數(shù)值

 更新時(shí)間:2021年07月19日 16:36:18   作者:小動物不困i  
這篇文章主要介紹了Spring Aop 如何獲取參數(shù)名參數(shù)值的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言:

有時(shí)候我們在用Spring Aop面向切面編程,需要獲取連接點(diǎn)(JoinPoint)方法參數(shù)名、參數(shù)值。

環(huán)境:

  • Mac OSX
  • Intellij IDEA
  • Spring Boot 2x
  • Jdk 1.8x

Code:

package com.example.aopdemo.aop; 
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.CodeSignature;
import org.springframework.stereotype.Component;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 * DemoAop
 * Create by Gray(Ganguocai@outlook.com)
 */
@Aspect
@Component
@Slf4j
public class DemoAop {
 
    /**
     * 環(huán)繞通知
     * @param proceedingJoinPoint
     * @return
     * @throws Throwable
     */
    @Around(value = "execution(* com.example.aopdemo..*(..)))")
    public Object demoAop(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        
        log.debug("執(zhí)行前:");
        
        Map<String, Object> params = getNameAndValue(proceedingJoinPoint);
        for (Map.Entry<String, Object> entry : params.entrySet()) {
            System.out.println("name: " + entry.getKey() + " value: " + entry.getValue());
        }
        
        Object object = proceedingJoinPoint.proceed();  //執(zhí)行連接點(diǎn)方法,object:方法返回值
        
        log.debug("執(zhí)行后:");
        
        return object;
    }
    /**
     * 獲取參數(shù)Map集合
     * @param joinPoint
     * @return
     */
    Map<String, Object> getNameAndValue(ProceedingJoinPoint joinPoint) {
        Map<String, Object> param = new HashMap<>();
        Object[] paramValues = joinPoint.getArgs();
        String[] paramNames = ((CodeSignature)joinPoint.getSignature()).getParameterNames();
        for (int i = 0; i < paramNames.length; i++) {
            param.put(paramNames[i], paramValues[i]);
        }
        return param;
    }
}

AOP切面獲取參數(shù)的一個(gè)小技巧

一般來說,我們的參數(shù),都是通過json傳遞的,那么這個(gè)問題就轉(zhuǎn)化成了,從json中獲取指定字符串的問題。

OK,這個(gè)問題就簡單了。

如下:

public static void main(String[] args) {
    // 這里JSONObject是fastjson-1.2.41.jar包下的
    JSONObject jsonObject = JSON.parseObject("{\"timeStamp\":21602756894612,\"status\":0,\"results\":{\"userName\":\"yang20102\",\"userLevel\":\"3\"},\"errorCode\":null,\"errorMessage\":null}");
    // 獲取json最外層字符串
    Object timeStamp = jsonObject.get("timeStamp");
    System.out.println("timeStamp:" + timeStamp);
 
    // 獲取復(fù)雜對象
    Object results = jsonObject.get("results");
    JSONObject jsonObjectResults = JSON.parseObject(results.toString());
    Object userName = jsonObjectResults.get("userName");
    System.out.println("userName:" + userName);
}

實(shí)例json如下:

{
  "timeStamp": 21602756894612,
  "status": 0,
  "results": {
    "userName": "yang20102",
    "userLevel": "3"
  },
  "errorCode": null,
  "errorMessage": null
}

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

相關(guān)文章

  • SpringBoot自定義對象參數(shù)超詳細(xì)介紹作用

    SpringBoot自定義對象參數(shù)超詳細(xì)介紹作用

    SpringBoot通過自定義對象參數(shù),可以實(shí)現(xiàn)自動類型轉(zhuǎn)換與格式化,并可以級聯(lián)封裝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • SpringBoot this調(diào)用@Bean效果詳解

    SpringBoot this調(diào)用@Bean效果詳解

    這篇文章主要介紹了在一個(gè)@Bean方法內(nèi),this調(diào)用同一個(gè)類的@Bean方法會有什么效果,我們可以通過bean的名稱、bean的類型或者bean的名稱+類型來獲取容器中的bean
    2023-02-02
  • Java模擬實(shí)現(xiàn)機(jī)場過安檢處理流程

    Java模擬實(shí)現(xiàn)機(jī)場過安檢處理流程

    這篇文章主要為大家詳細(xì)介紹了用Java模擬實(shí)現(xiàn)機(jī)場安全檢查流程的案例,涉及線程的相關(guān)知識,由子線程不斷的檢查通過旅客,感興趣的小伙伴們可以參考一下
    2022-04-04
  • springboot的http.server.requests服務(wù)請求流程源碼

    springboot的http.server.requests服務(wù)請求流程源碼

    這篇文章主要為大家介紹了springboot的http.server.requests服務(wù)請求流程源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java IO創(chuàng)建目錄和文件實(shí)例代碼

    Java IO創(chuàng)建目錄和文件實(shí)例代碼

    本篇文章給大家分享了Java IO創(chuàng)建目錄和文件的實(shí)例代碼,過程很簡單,大家可以測試參考下。
    2018-02-02
  • Java代理模式之靜態(tài)代理與動態(tài)代理的區(qū)別及優(yōu)缺點(diǎn)

    Java代理模式之靜態(tài)代理與動態(tài)代理的區(qū)別及優(yōu)缺點(diǎn)

    代理模式是一種常用的設(shè)計(jì)模式,它允許通過引入一個(gè)代理對象來控制對目標(biāo)對象的訪問,在Java中,代理模式被廣泛應(yīng)用,它可以提供額外的功能,如權(quán)限檢查、緩存、日志記錄等,本文將介紹靜態(tài)代理與動態(tài)代理的區(qū)別及優(yōu)缺點(diǎn),需要的朋友可以參考下
    2023-06-06
  • 簡單總結(jié)單例模式的4種寫法

    簡單總結(jié)單例模式的4種寫法

    今天帶大家學(xué)習(xí)java的相關(guān)知識,文章圍繞著單例模式的4種寫法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java中LocalCache本地緩存實(shí)現(xiàn)代碼

    Java中LocalCache本地緩存實(shí)現(xiàn)代碼

    本篇文章主要介紹了Java中LocalCache本地緩存實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java線程池實(shí)現(xiàn)原理詳解

    Java線程池實(shí)現(xiàn)原理詳解

    在面向?qū)ο缶幊讨校瑒?chuàng)建和銷毀對象是很費(fèi)時(shí)間的,因?yàn)閯?chuàng)建一個(gè)對象要獲取內(nèi)存資源或者其它更多資源,在Java中更是如此,虛擬機(jī)將試圖跟蹤每一個(gè)對象,以便能夠在對象銷毀后進(jìn)行垃圾回收,本文將對Java線程池實(shí)現(xiàn)原理進(jìn)行詳細(xì)介紹,需要的朋友可以參考下
    2023-07-07
  • 解決dubbo啟動報(bào)服務(wù)注冊失敗Failed?to?register?dubbo

    解決dubbo啟動報(bào)服務(wù)注冊失敗Failed?to?register?dubbo

    這篇文章主要介紹了解決dubbo啟動報(bào)服務(wù)注冊失敗Failed?to?register?dubbo問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論