SpringBoot自定義注解及AOP的開發(fā)和使用詳解
一、引入 AOP 依賴
自定義注解一般會和 AOP(切面)
結(jié)合使用,所以我們首先需要在項目中引入相應(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)是誰,也就是你的注解是用來修飾方法?類?還是屬性?這里是表明作用在方法上。@Retention:
表明該注解作用的生命周期,這里表明在運行時有效。@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:
表明該類為切面類,定義切面類時必須加這個注解。@Component:
表明把該類交給IOC
容器控制。@Pointcut:
定義切入點,結(jié)合@annotation(@interface)
使用,表明該方法為切入點。@interface
必須寫自定義注解的全路徑名。@Before:
表明被自定義注解代理的方法執(zhí)行前,先調(diào)用的方法。@After:
表明被自定義注解代理的方法執(zhí)行后,return
前調(diào)用的方法。@Around:
將被自定義注解代理的方法封裝起來,環(huán)繞通知(即在他之前之后通知),point.proceed()
表明執(zhí)行的目標(biāo)方法。
四、自定義注解測試
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()
方法上添加了一個 @Log
注解,他會在執(zhí)行這個方法時,執(zhí)行我們之前定義切面時創(chuàng)建的前置方法、后置方法、環(huán)繞方法。
在 SpringBoot 中使用自定義注解就是如此簡單,一般在通知方法中我們還會結(jié)合反射來獲取執(zhí)行方法的一些信息,如方法名,參數(shù),響應(yīng)值等,在后面我也會新開一篇文章專門講講反射,有興趣的掘友可以關(guān)注一下哦!
到此這篇關(guān)于SpringBoot自定義注解及AOP的開發(fā)和使用詳解的文章就介紹到這了,更多相關(guān)SpringBoot注解及AOP開發(fā)和使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java動態(tài)初始化數(shù)組,元素默認(rèn)值規(guī)則詳解
動態(tài)初始化數(shù)組涉及先定義數(shù)組長度,后填充具體數(shù)據(jù),適用于數(shù)據(jù)量已知但具體值未定的情況,這種初始化方式允許程序運行過程中賦值,并會根據(jù)數(shù)據(jù)類型設(shè)定默認(rèn)值,如整型為0,字符串為null,動態(tài)初始化與靜態(tài)初始化格式不能混用2024-10-10SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗
Spring Boot是一個用于構(gòu)建獨立的、基于生產(chǎn)級別的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è)計模式模板方法(Template)原理解析
這篇文章主要介紹了Java設(shè)計模式模板方法(Template)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11Spring?Boot之Validation自定義實現(xiàn)方式的總結(jié)
這篇文章主要介紹了Spring?Boot之Validation自定義實現(xiàn)方式的總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07