SpringBoot自定義注解及AOP的開(kāi)發(fā)和使用詳解
一、引入 AOP 依賴(lài)
自定義注解一般會(huì)和 AOP(切面) 結(jié)合使用,所以我們首先需要在項(xiàng)目中引入相應(yīng)的依賴(lài)。
<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)修飾方法?類(lèi)?還是屬性?這里是表明作用在方法上。@Retention:表明該注解作用的生命周期,這里表明在運(yùn)行時(shí)有效。@Documented:表明被它修飾的注解將被javadoc提取成文檔。
三、創(chuàng)建 AOP切面類(lèi)
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:表明該類(lèi)為切面類(lèi),定義切面類(lèi)時(shí)必須加這個(gè)注解。@Component:表明把該類(lèi)交給IOC容器控制。@Pointcut:定義切入點(diǎn),結(jié)合@annotation(@interface)使用,表明該方法為切入點(diǎn)。@interface必須寫(xiě)自定義注解的全路徑名。@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ì)新開(kāi)一篇文章專(zhuān)門(mén)講講反射,有興趣的掘友可以關(guān)注一下哦!
到此這篇關(guān)于SpringBoot自定義注解及AOP的開(kāi)發(fā)和使用詳解的文章就介紹到這了,更多相關(guān)SpringBoot注解及AOP開(kāi)發(fā)和使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實(shí)戰(zhàn)指南:Java編寫(xiě)Flink?SQL解決難題
想知道如何利用Java編寫(xiě)Flink?SQL解決難題嗎?本指南將為您揭示最實(shí)用的技巧和策略,讓您輕松應(yīng)對(duì)挑戰(zhàn),跟著我們一起探索,讓Java和Flink?SQL成為您問(wèn)題解決的得力助手!2023-12-12
SpringMVC如何獲取表單數(shù)據(jù)(radio和checkbox)
這篇文章主要介紹了SpringMVC如何獲取表單數(shù)據(jù)(radio和checkbox)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
springboot項(xiàng)目啟動(dòng)時(shí)打印maven打包時(shí)間實(shí)現(xiàn)方式
文章介紹了通過(guò)在pom文件中配置資源過(guò)濾和新增一個(gè)配置類(lèi)來(lái)映射properties文件內(nèi)字段,從而在啟動(dòng)時(shí)打印出打包時(shí)間的方法,以減少開(kāi)發(fā)和運(yùn)維之間的溝通錯(cuò)誤2026-01-01
java線(xiàn)程池工作隊(duì)列飽和策略代碼示例
這篇文章主要介紹了java線(xiàn)程池工作隊(duì)列飽和策略代碼示例,涉及線(xiàn)程池的簡(jiǎn)單介紹,工作隊(duì)列飽和策略的分析及代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
使用lombok@Data啟動(dòng)項(xiàng)目報(bào)錯(cuò)問(wèn)題及解決
logback 實(shí)現(xiàn)給變量指定默認(rèn)值

