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

springbootAOP定義切點(diǎn)獲取/修改請(qǐng)求參數(shù)方式

 更新時(shí)間:2024年08月27日 08:38:06   作者:Yonu  
這篇文章主要介紹了springbootAOP定義切點(diǎn)獲取/修改請(qǐng)求參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

AOP介紹

1.六種通知方式

  • 環(huán)繞通知:在目標(biāo)方法執(zhí)行前和執(zhí)行后實(shí)施增強(qiáng),可用于日志記錄,事務(wù)處理等
  • 前置通知:在目標(biāo)方法執(zhí)行前實(shí)施增強(qiáng),可用于權(quán)限管控等
  • 后置返回通知:在目標(biāo)方法成功執(zhí)行后實(shí)施增強(qiáng),可用于關(guān)閉流,刪除臨時(shí)文件等
  • 后置通知:在目標(biāo)方法執(zhí)行后實(shí)施增強(qiáng)(無論方法是否發(fā)生異常都執(zhí)行),可用于釋放資源
  • 異常通知:在目標(biāo)方法拋出異常時(shí)實(shí)施增強(qiáng),可用于處理異常,記錄日志等
  • 引入通知:在目標(biāo)類中添加一些方法和屬性,用于修改目標(biāo)類

2.AspectJ相關(guān)注解

  • @Aspect:用于定義一個(gè)切面,注解在切面類上
  • @Pointcut:用于定義切點(diǎn)表達(dá)式,在使用時(shí),需要定義一個(gè)切入點(diǎn)方法,該方法返回值為void,且方法體為空的普通方法
  • @Before:用于定義前置通知,通常為其指定value屬性,該值可以是已有切入點(diǎn),也可以定義切點(diǎn)表達(dá)式
  • @AfterReturning:用于定義后置返回通知,通常為其指定value屬性,該值可以是已有切入點(diǎn),也可以定義切點(diǎn)表達(dá)式
  • @Around:用于定義環(huán)繞通知,通常為其指定value屬性,該值可以是已有切入點(diǎn),也可以定義切點(diǎn)表達(dá)式
  • AfterThrowing:用于定義異常通知,通常為其指定value屬性,該值可以是已有切入點(diǎn),也可以定義切點(diǎn)表達(dá)式。另外還有一個(gè) throwing屬性用于訪問目標(biāo)方法拋出的異常,該屬性值與異常通知方法中同名的形參一致
  • After:用于定義后置最終通知,通常為其指定value屬性,該值可以是已有切入點(diǎn),也可以定義切點(diǎn)表達(dá)式

定義切入點(diǎn)的兩種方式

1.注解

//定義注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SafetyHarness {
    String defaultValue() default "";
}
//切入點(diǎn)
@Pointcut("@annotation(com.xx.xx.xx.web.annotation.SafetyHarness)")
    public void efficacyParameters(){
    }

2.表達(dá)式

//該controller所有方法,可以直接指定
/*
execution():表達(dá)式主體
第一個(gè) * 表示返回類型,使用*表示所有類型,該 * 與包名之間有一個(gè)空格
第二個(gè) * 表示類名
第三個(gè) * 表示方法名
..表示任意參數(shù)
*/
@Pointcut("value = "execution(* com.xx.xx.xx.web.controller.*.* (..)))")
    public void efficacyParameters(){
    }

常用兩種通知獲取參數(shù)

1.@Before

@Before("efficacyParameters()")
    public void beforeEfficacyParameters(JoinPoint joinPoint){
            //獲取請(qǐng)求參數(shù)
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
            Map<String, String[]> parameterMap = request.getParameterMap();
        	//通過參數(shù)名獲取
            Object ext1 = parameterMap.get("ext1");
            Object ext2 = parameterMap.get("ext2");
    }

2.@Around

	@Around("efficacyParameters()")
    public T beforeEfficacyParameters(ProceedingJoinPoint joinPoint){
        	//接口返回結(jié)果,該結(jié)果可在業(yè)務(wù)前或業(yè)務(wù)后執(zhí)行
            Object proceed = joinPoint.proceed();
   			
            Object[] obj = joinPoint.getArgs();
            if (obj == null || obj.length == 0) {
                return T;
            }
           //獲取請(qǐng)求參數(shù) 
            Map<String, Object> fieldsName = getFieldsName(joinPoint);
            Object ext1 = fieldsName.get("ext1");
            //POST請(qǐng)求強(qiáng)轉(zhuǎn)
            SafetyAuditPageVo ext2 = (SafetyAuditPageVo) fieldsName.get("ext");

			//修改請(qǐng)求參數(shù)
			SafetyAuditPageVo vo = (SafetyAuditPageVo) obj[0];
                vo.setXxxx("XXXXXX");
                obj[0] = vo;
                return  joinPoint.proceed(obj);
    }

	private static Map<String, Object> getFieldsName(ProceedingJoinPoint joinPoint) {
      
        Object[] args = joinPoint.getArgs();
        ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        String[] parameterNames = pnd.getParameterNames(method);
        Map<String, Object> paramMap = new HashMap<>(32);
        for (int i = 0; i < parameterNames.length; i++) {
            paramMap.put(parameterNames[i], args[i]);
        }
        return paramMap;
    }

總結(jié)

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

相關(guān)文章

  • eclipse中maven的pom.xml文件中增加依賴的方法

    eclipse中maven的pom.xml文件中增加依賴的方法

    日 在Maven項(xiàng)目中,可以使用pom.xml文件來添加依賴包,本文主要介紹了eclipse中maven的pom.xml文件中增加依賴的方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 構(gòu)建springboot自動(dòng)生成mapper文件和dao接口項(xiàng)目的步驟和配置方法

    構(gòu)建springboot自動(dòng)生成mapper文件和dao接口項(xiàng)目的步驟和配置方法

    這篇文章主要介紹了構(gòu)建springboot自動(dòng)生成mapper文件和dao接口項(xiàng)目的步驟和配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • SpringBoot通知機(jī)制的實(shí)現(xiàn)方式

    SpringBoot通知機(jī)制的實(shí)現(xiàn)方式

    這篇文章主要介紹了SpringBoot通知機(jī)制的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 一文讀懂JAVA中HttpURLConnection的用法

    一文讀懂JAVA中HttpURLConnection的用法

    這篇文章主要介紹了JAVA中的HttpURLConnection用法,文中講解非常細(xì)致,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • springboot配置aop切面日志打印過程解析

    springboot配置aop切面日志打印過程解析

    這篇文章主要介紹了springboot配置aop切面日志打印過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • JavaEE SpringMyBatis是什么? 它和Hibernate的區(qū)別及如何配置MyBatis

    JavaEE SpringMyBatis是什么? 它和Hibernate的區(qū)別及如何配置MyBatis

    這篇文章主要介紹了JavaEE Spring MyBatis是什么? 它和Hibernate的區(qū)別有哪些?如何配置MyBatis?本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳解Java如何通過Socket實(shí)現(xiàn)查詢IP

    詳解Java如何通過Socket實(shí)現(xiàn)查詢IP

    在本文中,我們來學(xué)習(xí)下如何找到連接到服務(wù)器的客戶端計(jì)算機(jī)的IP地址。我們將創(chuàng)建一個(gè)簡(jiǎn)單的客戶端-服務(wù)器場(chǎng)景,讓我們探索用于TCP/IP通信的java.net?API,感興趣的可以了解一下
    2022-10-10
  • String.trim()消除不了空格的問題及解決

    String.trim()消除不了空格的問題及解決

    這篇文章主要介紹了String.trim()消除不了空格的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 關(guān)于jd-gui啟動(dòng)報(bào)This?program?requires?Java?1.8+的錯(cuò)誤問題及解決方法

    關(guān)于jd-gui啟動(dòng)報(bào)This?program?requires?Java?1.8+的錯(cuò)誤問題及解決方法

    最近,在Mac使用上JD-GUI啟動(dòng)時(shí)總是報(bào)錯(cuò),接下來通過本文給大家介紹關(guān)于jd-gui啟動(dòng)報(bào)this?program?requires?Java?1.8+的錯(cuò)誤問題及解決方法,需要的朋友可以參考下
    2022-05-05
  • 基于Java實(shí)現(xiàn)數(shù)九天精準(zhǔn)計(jì)算的完整方案

    基于Java實(shí)現(xiàn)數(shù)九天精準(zhǔn)計(jì)算的完整方案

    在中國傳統(tǒng)歷法體系中,二十四節(jié)氣不僅是農(nóng)耕文明的智慧結(jié)晶,也是傳統(tǒng)文化數(shù)字化傳承的重要載體,其精準(zhǔn)計(jì)算是數(shù)九天推演的基礎(chǔ),本文將從工程實(shí)現(xiàn)角度,深度解析基于 Java 語言結(jié)合 tyme 歷法庫實(shí)現(xiàn)冬至日期計(jì)算、數(shù)九天周期推演的完整方案,需要的朋友可以參考下
    2026-02-02

最新評(píng)論

万州区| 兰州市| 山阴县| 紫阳县| 金川县| 吴忠市| 深水埗区| 辰溪县| 黄平县| 诸城市| 莎车县| 凌海市| 清流县| 亳州市| 莲花县| 汕尾市| 天长市| 梅河口市| 长武县| 蓝田县| 澜沧| 中宁县| 巧家县| 武夷山市| 阿鲁科尔沁旗| 宜良县| 泉州市| 拉孜县| 湘潭县| 满城县| 都江堰市| 濉溪县| 斗六市| 岳阳县| 武定县| 洪湖市| 德格县| 香港 | 马龙县| 会宁县| 西平县|