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

使用Spring Boot AOP實(shí)現(xiàn)日志記錄

這篇具有很好參考價(jià)值的文章主要介紹了使用Spring Boot AOP實(shí)現(xiàn)日志記錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

介紹

1.1 什么是AOP

1.2 AOP體系與概念

AOP簡單實(shí)現(xiàn)

2.1 新建一個(gè)SpringBoot項(xiàng)目,無需選擇依賴

2.2 設(shè)置好本地Maven配置后,在pom.xml文件里添加添加maven依賴

2.3 創(chuàng)建一個(gè)業(yè)務(wù)類接口

2.4 在實(shí)體類實(shí)現(xiàn)接口業(yè)務(wù)?

2.5 在單元測試運(yùn)行結(jié)果

2.6?創(chuàng)建切面類

2.7?再次運(yùn)行測試

?總結(jié)


介紹

1.1 什么是AOP

????????AOP(Aspect Oriented Programming),面向切面思想,是Spring的三大核心思想之一(兩外兩個(gè):IOC-控制反轉(zhuǎn)、DI-依賴注入)。

????????那么AOP為何那么重要呢?

????????在我們的程序中,經(jīng)常存在一些系統(tǒng)性的需求,比如權(quán)限校驗(yàn)、日志記錄、統(tǒng)計(jì)等,這些代碼會散落穿插在各個(gè)業(yè)務(wù)邏輯中,例如下面這個(gè)示意圖:

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

?

????????有多少業(yè)務(wù)操作,就要寫多少重復(fù)的校驗(yàn)和日志記錄代碼,這顯然是無法接受的。當(dāng)然,用面向?qū)ο蟮乃枷?,我們可以把這些重復(fù)的代碼抽離出來,寫成公共方法,就是下面這樣:

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

?

????????這樣,代碼冗余和可維護(hù)性的問題得到了解決,但每個(gè)業(yè)務(wù)方法中依然要依次手動調(diào)用這些公共方法,也是略顯繁瑣。有沒有更好的方式呢?有的,為了解決這個(gè)問題,面向切面編程(AOP)應(yīng)運(yùn)而生。AOP將權(quán)限校驗(yàn)、日志記錄等非業(yè)務(wù)代碼完全提取出來,與業(yè)務(wù)代碼分離,并尋找節(jié)點(diǎn)切入業(yè)務(wù)代碼中:

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

?

??????AOP通過預(yù)編譯方式和運(yùn)行動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù),AOP是OOP的延續(xù),是軟件開發(fā)中的一個(gè)熱點(diǎn),也是Spring框架中的一個(gè)重要內(nèi)容,是函數(shù)式編程的一種衍生泛型。利用AOP可以對業(yè)務(wù)邏輯的各部分進(jìn)行隔離,是開發(fā)人員在編寫業(yè)務(wù)邏輯時(shí),專注核心業(yè)務(wù),從而降低業(yè)務(wù)邏輯各模塊之間的耦合度,提高代碼重用和開發(fā)效率。??

????????AOP使用橫向抽取機(jī)制,取代縱向集成體系的重復(fù)代碼建設(shè)。使用Aspect,使業(yè)務(wù)邏輯只關(guān)注業(yè)務(wù)本身,將日志管理、事務(wù)處理、性能統(tǒng)計(jì)、異常處理、權(quán)限控制等代碼從業(yè)務(wù)邏輯代碼中抽離,從而實(shí)現(xiàn)改變這些行為的時(shí)候不影響業(yè)務(wù)邏輯代碼。

1.2 AOP體系與概念


Spring AOP和AspectJ

????????目前流行的AOP框架分別為Spring AOP和AspectJ。

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

AOP相關(guān)術(shù)語

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言


簡單地去理解,其實(shí)AOP要做三類事:

  • 在哪里切入,也就是權(quán)限校驗(yàn)等非業(yè)務(wù)操作在哪些業(yè)務(wù)代碼中執(zhí)行。

  • 在什么時(shí)候切入,是業(yè)務(wù)代碼執(zhí)行前還是執(zhí)行后。

  • 切入后做什么事,比如做權(quán)限校驗(yàn)、日志記錄等。

因此,AOP的體系可以梳理為下圖:

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

?

AOP簡單實(shí)現(xiàn)

? ? ? ? 下面我們通過一個(gè)簡單的案例來演示一下AOP的初級應(yīng)用:

2.1 新建一個(gè)SpringBoot項(xiàng)目,無需選擇依賴

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

2.2 設(shè)置好本地Maven配置后,在pom.xml文件里添加添加maven依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.3 創(chuàng)建一個(gè)業(yè)務(wù)類接口

?????????如圖,建立對應(yīng)的軟件包和接口,并在接口創(chuàng)建方法:

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

2.4 在實(shí)體類實(shí)現(xiàn)接口業(yè)務(wù)?

????????注意,一定要添加Service注解?

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

2.5 在單元測試運(yùn)行結(jié)果

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

2.6?創(chuàng)建切面類

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.StringJoiner;

@Component
@Aspect
public class LogAspect {
    @Before("execution(* com.example.aopdemo.service..*.*(..))")
    public void sysLog(JoinPoint jp){
        StringJoiner log = new StringJoiner("|","{","}");
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm:ss");
        log.add(formatter.format(LocalDateTime.now()));

        //當(dāng)前執(zhí)行的業(yè)務(wù)方法名稱
        String methodName = jp.getSignature().getName();
        log.add(methodName);

        //方法的參數(shù)
        Object[] args = jp.getArgs();
        for(Object arg:args){
            log.add(arg == null ? "-" : arg.toString() );
        }

        System.out.println("AOP日志啟動!" + log);
    }

2.7?再次運(yùn)行測試

????????再次運(yùn)行就發(fā)發(fā)現(xiàn)我們的日志已經(jīng)添加進(jìn)去了,并且沒有對原代碼進(jìn)行改變,這就是AOP的絲滑之處。

使用Spring Boot AOP實(shí)現(xiàn)日志記錄,java,開發(fā)語言

?總結(jié)

????????AOP使用橫向抽取機(jī)制,取代縱向集成體系的重復(fù)代碼建設(shè)。使用Aspect,使業(yè)務(wù)邏輯只關(guān)注業(yè)務(wù)本身,將日志管理、事務(wù)處理、性能統(tǒng)計(jì)、異常處理、權(quán)限控制等代碼從業(yè)務(wù)邏輯代碼中抽離,從而實(shí)現(xiàn)改變這些行為的時(shí)候不影響業(yè)務(wù)邏輯代碼。實(shí)乃開發(fā)必備之神器也,本文到此就結(jié)束了,希望大家可以有所收獲~文章來源地址http://www.zghlxwxcb.cn/news/detail-619726.html

到了這里,關(guān)于使用Spring Boot AOP實(shí)現(xiàn)日志記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包