国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring AOP】結(jié)合日志面向切面編程 兩種寫法

這篇具有很好參考價值的文章主要介紹了【Spring AOP】結(jié)合日志面向切面編程 兩種寫法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概念

??????? 這里需要提前了解什么是Spring的AOP(Aspect Oriented Programming)。是在OOP(面向?qū)ο螅┧枷氲囊环N拓展思想。簡單來說就是將某個代碼塊嵌入到其它的代碼塊中。筆者先前學(xué)Spring也有學(xué)什么IoC啊AOP啊,但實際上沒有用過、就那聽過學(xué)過沒啥用的。。沒會兒就忘記了。那種也就是個了解,好像知道是個什么事兒?當(dāng)時還特地去背關(guān)于AOP的那幾個專有名詞?現(xiàn)在想想有點好笑。

??????? 不過還是需要提前鞏固知道幾個詞??赐炅讼旅娴倪@三個詞的用法就開始進入模擬實戰(zhàn)。

切面(Aspect):由切點和通知組成。即使用@Aspect注解的類

切點(Pointcut):可以限定訪問修飾符、類全限定名、方法名和參數(shù)類型,甚至用于匹配注解

通知(Advice):想要嵌入到其它代碼塊的代碼塊。其中包括五種類型。

????????@Before(目標(biāo)方法執(zhí)行前執(zhí)行)

????????@After(目標(biāo)方法執(zhí)行后執(zhí)行)

????????@AfterReturning(目標(biāo)方法返回結(jié)果后不出現(xiàn)異常才執(zhí)行)

????????@AfterThrowin(出現(xiàn)異常才執(zhí)行)

????????@Around(以上都包括)

引入依賴

<!-- Spring Boot -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 簡化開發(fā) -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

<!-- AOP -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
</dependency>

創(chuàng)建注解

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

    /**
     * 描述
     *
     * @return {String}
     */
    String value();

}

業(yè)務(wù)代碼

@Slf4j
@RestController
@RequestMapping("/log")
public class LogController {


    @Log("AOP測試")
    @GetMapping("/aspect")
    public void aspect() {
        log.info("進入AOP測試方法");
        for(int i = 0; i < 10; ++i) {
            log.info("執(zhí)行業(yè)務(wù)邏輯{}", i);
        }
        log.info("結(jié)束AOP測試方法");
    }

}

編寫切面

有切點

@Slf4j
@Component
@Aspect
public class LogAspect {

    @Autowired
    private ApplicationEventPublisher publisher;

    /**
     * 切點
     * 這里面主要掌握兩個東西:
     *  1、如果使用注解的話就需要獲取注解的類全限定名
     *  2、執(zhí)行的execution表達式(這是比較重要掌握的) 這里面有四個參數(shù) 需要知道的是*也可以表示前綴或者后綴 和SQL中的"%"類似
     *      一、方法的訪問權(quán)限修飾符(public/protected/default/private)
     *      二、方法的返回值類型
     *      三、類的全限定名(包名.類名)
     *      四、*(..)的第一個表示方法名;括號內(nèi)表示參數(shù),而兩個點表示接收任何參數(shù)類型
     */
    @Pointcut("@annotation(com.chf.annotation.Log) && execution(public * com.chf.controller.*Controller.*(..))")
    public void logPointcut() {}

    @SneakyThrows
    @Around("logPointcut()")
    public Object around(ProceedingJoinPoint point) {
        // 獲取注解完后解析其內(nèi)部的屬性
        MethodSignature signature = (MethodSignature) point.getSignature();
        log.info("獲取注解,{}", signature); // void com.chf.controller.LogController.aspect()
        Method method = signature.getMethod();
        log.info("獲取注解的方法,{}", method);// public void com.chf.controller.LogController.aspect()
        Log logAnnotation = method.getAnnotation(Log.class);
        log.info("獲取使用注解的value參數(shù),{}", logAnnotation.value()); // AOP測試

        // 發(fā)送異步事件
        Long startTime = System.currentTimeMillis();
        Object o;
        try {
            o = point.proceed();
        } finally {
            // 這里可以使用發(fā)布訂閱模式發(fā)布異步事件 至于使用哪一種發(fā)布訂閱模式就看業(yè)務(wù)場景了
            Long endTime = System.currentTimeMillis();
            publisher.publishEvent(new LogEvent("事件處理的時間是:" + (endTime - startTime) + "ms"));
        }
        return o;
    }
}

無切點

@Slf4j
@Component
@Aspect
public class LogAspect {

    @Autowired
    private ApplicationEventPublisher publisher;

    @SneakyThrows
    @Around("@annotation(logAnnotation) && execution(public * com.chf.controller.*Controller.*(..))")
    public Object around(ProceedingJoinPoint point, Log logAnnotation) {
        // 獲取注解完后解析其內(nèi)部的屬性
        MethodSignature signature = (MethodSignature) point.getSignature();
        log.info("獲取注解,{}", signature); // void com.chf.controller.LogController.aspect()
        Method method = signature.getMethod();
        log.info("獲取注解的方法,{}", method);// public void com.chf.controller.LogController.aspect()
        Log logAnnotation = method.getAnnotation(Log.class);
        log.info("獲取使用注解的value參數(shù),{}", logAnnotation.value()); // AOP測試

        // 發(fā)送異步事件
        Long startTime = System.currentTimeMillis();
        Object o;
        try {
            o = point.proceed();
        } finally {
            Long endTime = System.currentTimeMillis();
            publisher.publishEvent(new LogEvent("事件處理的時間是:" + (endTime - startTime) + "ms"));
        }
        return o;
    }
}

測試

??????? 不了解Spring的發(fā)布訂閱模式可以看這篇博文:https://blog.csdn.net/m0_65563175/article/details/131899828?spm=1001.2014.3001.5501文章來源地址http://www.zghlxwxcb.cn/news/detail-635496.html

到了這里,關(guān)于【Spring AOP】結(jié)合日志面向切面編程 兩種寫法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 認識 spring AOP (面向切面編程) - springboot

    認識 spring AOP (面向切面編程) - springboot

    本篇介紹什么是spring AOP, AOP的優(yōu)點,使用場景,spring AOP的組成,簡單實現(xiàn)AOP 并 了解它的通知;如有錯誤,請在評論區(qū)指正,讓我們一起交流,共同進步! 本文開始 AOP: 面向切面編程,也就是面向某一類編程,對某一類事情進行統(tǒng)一處理; spring AOP: 是實現(xiàn)了AOP這種思想的一

    2024年02月14日
    瀏覽(25)
  • 切面的魔力:解密Spring AOP 面向切面編程

    切面的魔力:解密Spring AOP 面向切面編程

    目錄 一、AOP簡介 1.1 什么是AOP ? 1.2?什么是面向切面編程 ? 1.3?AOP 的特點 二、?AOP的基本概念解讀 2.1 AOP的基本概念 2.2 AOP 概念趣事解讀 三、代碼情景演示 3.1?編寫目標(biāo)對象(超級英雄們正常的行動) 3.2 編寫通知類 3.2.1?前置通知 3.2.2 后置通知 3.2.3 異常通知 3.2.4 環(huán)繞通知

    2024年02月11日
    瀏覽(89)
  • JAVA:使用 Spring AOP 實現(xiàn)面向切面編程

    JAVA:使用 Spring AOP 實現(xiàn)面向切面編程

    1、簡述 在現(xiàn)代的軟件開發(fā)中,面向切面編程(AOP)是一種重要的編程范式,它允許我們將橫切關(guān)注點(如日志記錄、性能監(jiān)控、事務(wù)管理等)從應(yīng)用程序的核心業(yè)務(wù)邏輯中分離出來,以提高代碼的模塊化和可維護性。Spring 框架提供了強大的 AOP 支持,使得我們可以輕松地實

    2024年04月13日
    瀏覽(31)
  • 【Java 初級】Spring核心之面向切面編程(AOP)

    【Java 初級】Spring核心之面向切面編程(AOP)

    tip:作為程序員一定學(xué)習(xí)編程之道,一定要對代碼的編寫有追求,不能實現(xiàn)就完事了。我們應(yīng)該讓自己寫的代碼更加優(yōu)雅,即使這會費時費力。 ???? 推薦: 體系化學(xué)習(xí)Java(Java面試專題) AOP(面向切面編程)是一種編程范式,用于將橫切關(guān)注點(如日志記錄、性能統(tǒng)計等

    2024年02月04日
    瀏覽(28)
  • spring6-AOP面向切面編程

    spring6-AOP面向切面編程

    1、場景模擬 搭建子模塊:spring6-aop 1.1、聲明接口 聲明計算器接口Calculator,包含加減乘除的抽象方法 1.2、創(chuàng)建實現(xiàn)類 1.3、創(chuàng)建帶日志功能的實現(xiàn)類 1.4、提出問題 ①現(xiàn)有代碼缺陷 針對帶日志功能的實現(xiàn)類,我們發(fā)現(xiàn)有如下缺陷: 對核心業(yè)務(wù)功能有干擾,導(dǎo)致程序員在開發(fā)核

    2024年02月08日
    瀏覽(31)
  • Spring AOP (面向切面編程)原理與代理模式—實例演示

    Spring AOP (面向切面編程)原理與代理模式—實例演示

    Spring 中文文檔 (springdoc.cn) Spring | Home 官網(wǎng) ????????Java是一個面向?qū)ο螅∣OP)的語言,但它有一些弊端。雖然使用OOP可以通過組合或繼承的方式來實現(xiàn)代碼的重用。但當(dāng)我們需要為多個不具有繼承關(guān)系的對象(一般指的是兩個不同的類,它們之間沒有繼承自同一個父類或接

    2024年02月15日
    瀏覽(28)
  • Spring AOP使用指南: 強大的面向切面編程技術(shù)

    Spring AOP使用指南: 強大的面向切面編程技術(shù)

    ???? 博主貓頭虎(????)帶您 Go to New World??? ?? 博客首頁 ——????貓頭虎的博客?? ?? 《面試題大全專欄》 ?? 文章圖文并茂??生動形象??簡單易學(xué)!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍專欄》 ?? 學(xué)會IDEA常用操作,工作效率翻倍~?? ?? 《100天精通Golang(基礎(chǔ)

    2024年02月09日
    瀏覽(26)
  • 【JavaEE】面向切面編程AOP是什么-Spring AOP框架的基本使用

    【JavaEE】面向切面編程AOP是什么-Spring AOP框架的基本使用

    【JavaEE】 AOP(1) 1.1 AOP 與 Spring AOP AOP ( A spect O riented P rogramming),是一種思想,即 面向切面編程 Spring AOP 則是一個框架,Spring項目中需要引入依賴而使用 AOP和Spring AOP的關(guān)系就相當(dāng)于IoC和DI Spring AOP讓開發(fā)者能夠半自動的開發(fā)AOP思想下實現(xiàn)的功能 1.2 沒有AOP的世界是怎樣的

    2024年02月11日
    瀏覽(29)
  • 【Spring(十一)】萬字帶你深入學(xué)習(xí)面向切面編程AOP

    【Spring(十一)】萬字帶你深入學(xué)習(xí)面向切面編程AOP

    ??今天我們來學(xué)習(xí) AOP ,在最初我們學(xué)習(xí)Spring時說過Spring的兩大特征,一個是 IOC ,一個是 AOP ,我們現(xiàn)在要學(xué)習(xí)的就是這個AOP。 ??AOP: 面向切面編程 ,一種編程范式,指導(dǎo)開發(fā)者如何組織程序結(jié)構(gòu)。 ??作用:在不驚動原始設(shè)計的基礎(chǔ)上為其進行 功能增強 。 ??首先我們先

    2024年01月25日
    瀏覽(26)
  • Spring AOP:面向切面編程在實際項目中的應(yīng)用

    Spring AOP:面向切面編程在實際項目中的應(yīng)用

    ???? 博主貓頭虎(????)帶您 Go to New World??? ?? 博客首頁 ——????貓頭虎的博客?? ?? 《面試題大全專欄》 ?? 文章圖文并茂??生動形象??簡單易學(xué)!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍專欄》 ?? 學(xué)會IDEA常用操作,工作效率翻倍~?? ?? 《100天精通Golang(基礎(chǔ)

    2024年02月09日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包