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

SpringBoot自定義注解及AOP的開發(fā)和使用詳解

 更新時(shí)間:2023年08月15日 08:58:12   作者:JK凱  
在公司項(xiàng)目中,如果需要做一些公共的功能,如日志等,最好的方式是使用自定義注解,自定義注解可以實(shí)現(xiàn)我們對(duì)想要添加日志的方法上添加,這篇文章基于日志功能來(lái)講講自定義注解應(yīng)該如何開發(fā)和使用,需要的朋友可以參考下

一、引入 AOP 依賴

自定義注解一般會(huì)和 AOP(切面) 結(jié)合使用,所以我們首先需要在項(xiàng)目中引入相應(yīng)的依賴。

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

二、創(chuàng)建自定義注解 Log 

annotation.Log:

import java.lang.annotation.*;  
@Target(ElementType.METHOD)  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
public @interface Log {  
    String value() default "";  
}
  • @Target: 表明該注解可以作用的目標(biāo)是誰(shuí),也就是你的注解是用來(lái)修飾方法?類?還是屬性?這里是表明作用在方法上。
  • @Retention: 表明該注解作用的生命周期,這里表明在運(yùn)行時(shí)有效。
  • @Documented: 表明被它修飾的注解將被 javadoc 提取成文檔。

三、創(chuàng)建 AOP切面類

aspect.LogAspect:

import org.aspectj.lang.ProceedingJoinPoint;  
import org.aspectj.lang.annotation.*;  
import org.springframework.stereotype.Component;  
@Aspect  
@Component  
public class LogAspect {  
    @Pointcut("@annotation(com.jk.annotation.Log)")  
    public void pointCut(){}  
    @Before("pointCut()")  
    public void before() {  
        System.out.println("前置通知...");  
    }  
    @After("pointCut()")  
    public void after() {  
        System.out.println("后置通知...");  
    }  
    @Around("pointCut()")  
    public void around(ProceedingJoinPoint point) throws Throwable {  
        System.out.println("環(huán)繞通知前...");  
        point.proceed();  
        System.out.println("環(huán)繞通知后...");  
    }  
}
  • @Aspect: 表明該類為切面類,定義切面類時(shí)必須加這個(gè)注解。
  • @Component: 表明把該類交給 IOC 容器控制。
  • @Pointcut: 定義切入點(diǎn),結(jié)合 @annotation(@interface) 使用,表明該方法為切入點(diǎn)。 @interface 必須寫自定義注解的全路徑名。
  • @Before: 表明被自定義注解代理的方法執(zhí)行前,先調(diào)用的方法。
  • @After: 表明被自定義注解代理的方法執(zhí)行后, return 前調(diào)用的方法。
  • @Around: 將被自定義注解代理的方法封裝起來(lái),環(huán)繞通知(即在他之前之后通知), point.proceed() 表明執(zhí)行的目標(biāo)方法。

四、自定義注解測(cè)試

controller.TestController:

import com.jk.annotation.Log;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
@RestController  
@RequestMapping("/test")  
public class TestController {  
    @GetMapping  
    @Log  
    public void test() {  
        System.out.println("執(zhí)行test方法");
    }  
}

test() 方法上添加了一個(gè) @Log 注解,他會(huì)在執(zhí)行這個(gè)方法時(shí),執(zhí)行我們之前定義切面時(shí)創(chuàng)建的前置方法、后置方法、環(huán)繞方法。

image.png

在 SpringBoot 中使用自定義注解就是如此簡(jiǎn)單,一般在通知方法中我們還會(huì)結(jié)合反射來(lái)獲取執(zhí)行方法的一些信息,如方法名,參數(shù),響應(yīng)值等,在后面我也會(huì)新開一篇文章專門講講反射,有興趣的掘友可以關(guān)注一下哦!

到此這篇關(guān)于SpringBoot自定義注解及AOP的開發(fā)和使用詳解的文章就介紹到這了,更多相關(guān)SpringBoot注解及AOP開發(fā)和使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java動(dòng)態(tài)初始化數(shù)組,元素默認(rèn)值規(guī)則詳解

    Java動(dòng)態(tài)初始化數(shù)組,元素默認(rèn)值規(guī)則詳解

    動(dòng)態(tài)初始化數(shù)組涉及先定義數(shù)組長(zhǎng)度,后填充具體數(shù)據(jù),適用于數(shù)據(jù)量已知但具體值未定的情況,這種初始化方式允許程序運(yùn)行過程中賦值,并會(huì)根據(jù)數(shù)據(jù)類型設(shè)定默認(rèn)值,如整型為0,字符串為null,動(dòng)態(tài)初始化與靜態(tài)初始化格式不能混用
    2024-10-10
  • maven的5種打包方式小結(jié)

    maven的5種打包方式小結(jié)

    本文主要介紹了maven的5種打包方式小結(jié),主要是幾種插件打包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗

    SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗

    Spring Boot是一個(gè)用于構(gòu)建獨(dú)立的、基于生產(chǎn)級(jí)別的Spring應(yīng)用程序的框架,下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Java中this和super的區(qū)別及this能否調(diào)用到父類使用

    Java中this和super的區(qū)別及this能否調(diào)用到父類使用

    這篇文章主要介紹了Java中this和super的區(qū)別及this能否調(diào)用到父類使用,this和super都是Java中常見的關(guān)鍵字,下文關(guān)于兩者區(qū)別介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Java設(shè)計(jì)模式模板方法(Template)原理解析

    Java設(shè)計(jì)模式模板方法(Template)原理解析

    這篇文章主要介紹了Java設(shè)計(jì)模式模板方法(Template)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java ForkJoin框架的原理及用法

    Java ForkJoin框架的原理及用法

    這篇文章主要介紹了Java ForkJoin框架的原理及用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java回調(diào)機(jī)制解讀

    Java回調(diào)機(jī)制解讀

    本文主要介紹了Java回調(diào)機(jī)制的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 一文掌握Spring的創(chuàng)建與使用

    一文掌握Spring的創(chuàng)建與使用

    這篇文章詳細(xì)介紹了spring的創(chuàng)建與使用,文章中有詳細(xì)的代碼示例和圖片介紹,對(duì)學(xué)習(xí)有一定的而參考價(jià)值,需要的同學(xué)可以參考一下
    2023-04-04
  • 關(guān)于Spring Cloud健康檢查的陷阱

    關(guān)于Spring Cloud健康檢查的陷阱

    這篇文章主要介紹了關(guān)于Spring Cloud健康檢查的陷阱,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring?Boot之Validation自定義實(shí)現(xiàn)方式的總結(jié)

    Spring?Boot之Validation自定義實(shí)現(xiàn)方式的總結(jié)

    這篇文章主要介紹了Spring?Boot之Validation自定義實(shí)現(xiàn)方式的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論