成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot自定義注解屬性支持占位符$「x」

開發 前端
本文教你如何在SpringBoot環境下使得自定義的注解能夠使用${xxx}表達式。

[[382427]]

 環境:SpringBoot2.3.8.RELEASE + JDK1.8

本文教你如何在SpringBoot環境下使得自定義的注解能夠使用${xxx}表達式。

相關依賴

  1. <dependency> 
  2.             <groupId>org.aspectj</groupId> 
  3.             <artifactId>aspectjrt</artifactId> 
  4. </dependency> 
  5. <dependency> 
  6.             <groupId>org.aspectj</groupId> 
  7.             <artifactId>aspectjweaver</artifactId> 
  8.             <scope>runtime</scope> 
  9. </dependency> 

 自定義注解

  1. @Retention(RetentionPolicy.RUNTIME) 
  2. @Target(ElementType.METHOD) 
  3. @Documented 
  4. public @interface Manufactur { 
  5.     String value() default "" ; // 廠商編號 

 AOP

需要AOP在方法執行器對方法上的注解進行解析處理,獲取占位符對應的值

  1. @Component 
  2. @Aspect 
  3. public class ManufacturAspect implements EnvironmentAware { 
  4.      
  5.     private static final Logger logger = LoggerFactory.getLogger(ManufacturAspect.class) ; 
  6.      
  7.     private Environment environment; 
  8.      
  9.     @Pointcut("@annotation(com.pack.annotation.Manufactur)"
  10.     private void info() {} 
  11.      
  12.     @Before("info()"
  13.     public void execBefore(JoinPoint jp) { 
  14.         MethodSignature sign = (MethodSignature) jp.getSignature() ; 
  15.         Method method = sign.getMethod() ; 
  16.         Manufactur manu = method.getAnnotation(Manufactur.class) ; 
  17.         String value = manu.value() ; 
  18.         logger.info("獲取到注解值:{}", value) ; 
  19.         BusinessService.code.set(this.environment.resolvePlaceholders(value)) ; 
  20.     } 
  21.  
  22.     @Override 
  23.     public void setEnvironment(Environment environment) { 
  24.         this.environment = environment ; 
  25.     } 
  26.      

 該類實現了EnvironmentAware 用于獲取Environment對象,該對象能夠獲取當前環境下的所有相關配置信息。同時通過該類的resolvePlaceholders方法能夠解析占位符對應的內容值。

Service中使用

  1. @Service 
  2. public class BusinessService { 
  3.      
  4.     public static ThreadLocal<String> code = new ThreadLocal<String>() ; 
  5.      
  6.     private static Logger logger = LoggerFactory.getLogger(BusinessService.class) ; 
  7.      
  8.     @Manufactur("${manufactur.code}-#{1 + 3}"
  9.     public String invoke(String id) { 
  10.         String sno = code.get() ; 
  11.         logger.info("自定義注解動態獲取屬性值:{}", sno) ; 
  12.         // todo 
  13.         return sno ; 
  14.     } 
  15.      

 在AOP中將解析后的值已經存入到了ThreadLocal中。

測試

  1. @RestController 
  2. @RequestMapping("/business"
  3. public class BusinessController { 
  4.      
  5.     @Resource 
  6.     private BusinessService bs ; 
  7.      
  8.     @GetMapping("/{id}"
  9.     public Object home(@PathVariable String id) { 
  10.         return bs.invoke(id) ; 
  11.     } 
  12.      

 

到此一個自定義注解中支持占位符就完成了,還是非常簡單的。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-10-11 07:57:23

springboot微服務

2024-10-09 10:46:41

springboot緩存redis

2024-07-02 11:42:53

SpringRedis自定義

2023-10-09 07:37:01

2013-04-01 14:35:10

Android開發Android自定義x

2024-10-14 17:18:27

2022-09-21 14:42:03

JSProps屬性

2023-10-24 13:48:50

自定義注解舉值驗證

2017-03-27 16:50:26

windowsedge微軟

2024-12-27 15:37:23

2021-12-30 12:30:01

Java注解編譯器

2022-09-13 09:02:19

SpringBootStarter機制

2011-03-17 09:45:01

Spring

2022-02-17 07:10:39

Nest自定義注解

2022-11-01 11:15:56

接口策略模式

2020-11-25 11:20:44

Spring注解Java

2011-08-09 17:16:56

CoreAnimati動畫

2009-08-06 17:13:56

ASP.NET自定義控

2009-08-04 13:35:16

ASP.NET自定義樣

2021-07-01 11:07:49

Swift 自定義操作符
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: h视频在线播放 | 日韩欧美一区二区三区 | 色偷偷噜噜噜亚洲男人 | 欧美成人高清 | 99视频久 | 日韩成人免费视频 | 久久精品色视频 | 亚洲精品二区 | 亚洲视频中文字幕 | 国产精品美女久久久av超清 | 超碰网址| 麻豆av免费观看 | 亚洲免费在线视频 | 97色在线观看免费视频 | 天天操狠狠操 | 久久久久久九九九九九九 | www.se91 | 97国产精品视频人人做人人爱 | 日韩欧美在 | 亚洲乱码国产乱码精品精98午夜 | 国产美女精品视频 | 久久久噜噜噜久久中文字幕色伊伊 | 国产成人精品一区二区三 | 在线免费观看黄色 | 国产亚洲精品一区二区三区 | 欧美在线观看一区 | 天天宗合网| 欧美综合国产精品久久丁香 | 一区二区三区在线 | 99色在线| 天天天天操 | 欧美video | 欧美日韩一区在线 | 91一区二区三区 | 久久99网| 欧美日韩一卡二卡 | 成人片免费看 | 91人人看 | 久精品久久 | 在线观看国产精品视频 | 老外几下就让我高潮了 |