亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在SpringBoot中實現定位切點

發布時間:2021-06-09 16:24:11 來源:億速云 閱讀:228 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關如何在SpringBoot中實現定位切點,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

execution 表達式

execution表達式的方式主要是在定義切點的時候,通過表達式的方式選取到所需要增強的方法。

execution表達式解讀

execution(<修飾符模式>?<返回類型模式><方法名模式>(<參數模式>)<異常模式>?)
類型解讀是否必須示例
<修飾符模式>表示所選的修飾符類型public/private/...
<返回類型模式>表示所選的返回值類型void/int/...
<方法名模式>表示所選的包或者方法com.luke.service/com.luke.controller.*/...
(<參數模式>)表示所選方法的參數*(..)/*(String name)/*(int size, ..)/...
<異常模式>表示所選方法的異常類型throws Exception/...
 // 匹配指定包中的所有方法
execution(* com.luke.service.*(..))

// 匹配當前包中的所有public方法
execution(public * UserService.*(..))

// 匹配指定包中的所有public方法,并且返回值是int類型的方法
execution(public int com.luke.service.*(..))

// 匹配指定包中的所有public方法,并且第一個參數是String,返回值是int類型的方法
execution(public int com.luke.service.*(String name, ..))

自定義切面類:

@Aspect
@Component
public class LogAspect {

    @Pointcut("execution(* com.luke.springdata.controller.*.*(..))")
    public void operationLog(){}

    /**
     * 這里只定義一個Around的增強做展示
     */
    @Around("operationLog()")
    public Object doAround(ProceedingJoinPoint joinPoint) {
        Object proceed = null;
        try {
            System.out.println("方法執行前");
            proceed = joinPoint.proceed();
            System.out.println("方法執行后");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return proceed;
    }
}

此切點的execution表達式為com.luke.springdata.controller包下的所有方法。
使用**@Around**注解表明增強的方法,并且指定切點。

測試用Controller類

@RestController
@RequestMapping("/person")
public class PersonController {

    @GetMapping("/test")
    public void test(){
        System.out.println("方法執行了");
    }
    
}

運行項目,調用該方法,查看結果。

方法執行前
方法執行了
方法執行后

自定義注解的方法

自定義注解的方式就是在需要增強的方法上面加上自定義的注解即可。

自定義注解類:

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log{
    
}

這里自定義了一個注解Log,該注解只能加在方法上。
自定義切面類:

@Aspect
@Component
public class LogAspect {

    @Pointcut("@annotation(com.luke.springdata.annotation.Log)")
    public void operationLog(){}

    /**
     * 這里只定義一個Around的增強做展示
     */
    @Around("operationLog()")
    public Object doAround(ProceedingJoinPoint joinPoint) {
        Object proceed = null;
        try {
            System.out.println("方法執行前");
            proceed = joinPoint.proceed();
            System.out.println("方法執行后");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return proceed;
    }
}

這里編寫的自定義個切面類,用**@Pointcut注解定義一個切面,并且這次采用@annotation(xxx)**的方式表明如果哪個方法上添加了xxx注解,則就使用該切面做增強。

同時在每個增強的方法上使用該切面,隨后編寫正常的方法增強邏輯即可。

測試用Controller類

@RestController
@RequestMapping("/person")
public class PersonController {

    @Log
    @GetMapping("/test")
    public void test(){
        System.out.println("方法執行了");
    }
    
}

此時在需要使用切面的方法上加入**@Log**注解,調用該方法,查看效果。

方法執行前
方法執行了
方法執行后

看完上述內容,你們對如何在SpringBoot中實現定位切點有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建德市| 阜新市| 扶沟县| 邮箱| 枝江市| 荥经县| 贵州省| 南雄市| 临武县| 南陵县| 和林格尔县| 丹凤县| 鄯善县| 响水县| 八宿县| 蒲江县| 卢龙县| 彭州市| 邢台市| 通山县| 长白| 福州市| 安岳县| 堆龙德庆县| 民乐县| 洛川县| 石嘴山市| 体育| 牡丹江市| 资兴市| 廉江市| 景德镇市| 杭州市| 右玉县| 隆林| 岳池县| 蒙山县| 汾阳市| 江华| 成武县| 武山县|