springBoot自定義註解的使用
晚上睡不著看了看自定義註解,記錄下學習過程
參考https://blog.csdn.net/qq_37435078/article/details/90523309
自定義註解其實是使用springAop來實現的(我只會這麼用,輕噴!)
我們嘗試寫一個自定義註解,並將註解中的值輸出到控制檯
實現步驟如下
start
1. 定義一個註解類
2. 定義一個java類,用來“實現”這個註解(類似介面和實現類)
3. 定義一個controller,service,entity 用來測試註解
end
定義註解 程式碼如下
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Slog {
String value() default "";
}
- @Documented:註解資訊會被新增到Java文件中
- @Retention:註解的生命週期,表示註解會被保留到什麼階段,可以選擇編譯階段、類載入階段,或執行階段
- @Target:註解作用的位置,ElementType.METHOD表示該註解僅能作用於方法上
之後 我們將註解新增到方法上,程式碼如下
@RestController
public class UserController {
@Slog("我是日誌")
@RequestMapping("user")
public void TestAspect() {
}
}
好了,接下來就進入正題,開始寫註解的“實現”
定義一個註解切面類
注意,@Aspect這個註解需要新增jar包,也就是說需要在pom檔案加入依賴,如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
之後就可以正常新增了。
@Component
@Aspect
public class SlogAspect {
@Pointcut("@annotation(com.example.demo.annotation.Slog)")
private void pointcut() {
}
@Before("pointcut() && @annotation(logger)")
public void advice(JoinPoint joinPoint, Slog logger) {
System.out.println(logger.value());
}
}
其中 @Pointcut註解 用於定義切入點,也就是在標記有Slog註解的方法上進行切入
@Before中的pointcut()這麼寫的原因是宣告,我們要在這個切入點的執行前後(之前,之後,環繞等)進行一些邏輯處理,然後通過@annotation(logger)可以獲得自定義註解物件賦予的值,也就是@Slog("我是日誌")中的括號內容
之後重啟專案(新增,修改註解的實現後都需要重啟來讓註解生效)。
在控制檯就可以看到我們輸出的日誌了
2020-12-28 02:34:31.601 INFO 3520 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-12-28 02:34:31.602 INFO 3520 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-12-28 02:34:31.602 INFO 3520 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms
我是日誌
相關文章
- SpringBoot自定義校驗註解Spring Boot
- SpringBoot自定義註解、AOP列印日誌Spring Boot
- SpringBoot中搭配AOP實現自定義註解Spring Boot
- SpringBoot系列之使用自定義註解校驗使用者是否登入Spring Boot
- 基於SpringBoot 、AOP與自定義註解轉義字典值Spring Boot
- 自定義註解
- Java中的註解-自定義註解Java
- SpringBoot專案使用AOP及自定義註解儲存操作日誌Spring Boot
- Springboot AOP 自定義註解實現系統日誌Spring Boot
- SpringBoot分組校驗及自定義校驗註解Spring Boot
- 自定義JAVA註解Java
- 自定義ConditionalOnXX註解
- Java 自定義註解及使用場景Java
- SpringBoot自定義註解@YmlPropertySource載入yml或者yaml檔案Spring BootYAML
- keycloak~使用自定義的註冊頁
- JAVA-註解(2)-自定義註解及反射註解Java反射
- 自定義註解以及註解在反射中的應用反射
- java中如何自定義註解Java
- Spring Boot 自定義註解失效Spring Boot
- 自定義校驗註解ConstraintValidatorAI
- 自定義註解+反射 實現給註解新增功能的效果反射
- 使用自定義註解透過BeanPostProcessor實現策略模式Bean模式
- 註解@PropertySource使用 springbootSpring Boot
- springboot如何使用自定義配置檔案Spring Boot
- Flutter利用註解生成可自定義的路由Flutter路由
- 你的開發利器Spring自定義註解Spring
- 筆記3:自定義註解的實現筆記
- SpringBoot自定義StarterSpring Boot
- springboot 自定義errorSpring BootError
- SpringBoot 自定義 starterSpring Boot
- Java註解-後設資料、註解分類、內建註解和自定義註解Java
- SpringBoot應用使用自定義的ApplicationContext實現類Spring BootAPPContext
- app直播原始碼,java自定義註解APP原始碼Java
- java自定義註解學習(三)_註解解析及應用Java
- Feign通過自定義註解實現路徑的轉義
- 基於shiro的自定義註解的擴充套件套件
- Springboot+Redisson自定義註解一次解決重複提交問題(含原始碼)Spring BootRedis原始碼
- springboot自定義異常Spring Boot