SpringBoot自定義注解及AOP的開發(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)繞方法。
在 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ī)則詳解
動(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-10SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗
Spring Boot是一個(gè)用于構(gòu)建獨(dú)立的、基于生產(chǎn)級(jí)別的Spring應(yīng)用程序的框架,下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗的相關(guān)資料,需要的朋友可以參考下2024-08-08Java中this和super的區(qū)別及this能否調(diào)用到父類使用
這篇文章主要介紹了Java中this和super的區(qū)別及this能否調(diào)用到父類使用,this和super都是Java中常見的關(guān)鍵字,下文關(guān)于兩者區(qū)別介紹,需要的小伙伴可以參考一下2022-05-05Java設(shè)計(jì)模式模板方法(Template)原理解析
這篇文章主要介紹了Java設(shè)計(jì)模式模板方法(Template)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Spring?Boot之Validation自定義實(shí)現(xiàn)方式的總結(jié)
這篇文章主要介紹了Spring?Boot之Validation自定義實(shí)現(xiàn)方式的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07