精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

場景題:實際工作中哪里用到了自定義注解?如何實現自定義注解?

開發 前端
自定義注解被廣泛應用于日常開發中,像日志記錄、性能監控、權限判斷和冪等性判斷等功能的實現,使用自定義注解來實現是非常方便的。

自定義注解可以標記在方法上或類上,用于在編譯期或運行期進行特定的業務功能處理。在 Java 中,自定義注解使用 @interface 關鍵字來定義,它可以實現如:日志記錄、性能監控、權限校驗等功能。

在 Spring Boot 中實現一個自定義注解,可以通過 AOP(面向切面編程)或攔截器(Interceptor)來實現。

1.實現自定義注解

下面我們先使用 AOP 的方式來實現一個打印日志的自定義注解,它的實現步驟如下:

  1. 添加 Spring AOP 依賴。
  2. 創建自定義注解。
  3. 編寫 AOP 攔截(自定義注解)的邏輯代碼。
  4. 使用自定義注解。

具體實現如下。

(1)添加 Spring AOP 依賴

在 pom.xml 中添加如下依賴:

<dependencies>
  <!-- Spring AOP dependency -->
  <dependency>
    <groupIdorg.springframework.boot</groupId>
      <artifactIdspring-boot-starter-aop</artifactId>
      </dependency>
</dependencies>

(2)創建自定義注解

創建一個新的 Java 注解類,通過 @interface 關鍵字來定義,并可以添加元注解以及屬性。

import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomLogAnnotation {
    String value() default "";
    boolean enable() default true;
}

在上面的例子中,我們定義了一個名為 CustomLogAnnotation 的注解,它有兩個屬性:value 和 enable,分別設置了默認值。

  • @Target(ElementType.METHOD) 指定了該注解只能應用于方法級別。
  • @Retention(RetentionPolicy.RUNTIME) 表示這個注解在運行時是可見的,這樣 AOP 代理才能在運行時讀取到這個注解。

(3)編寫 AOP 攔截(自定義注解)的邏輯代碼

使用 Spring AOP 來攔截帶有自定義注解的方法,并在其前后執行相應的邏輯。

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class CustomLogAspect {
    @Around("@annotation(customLog)")
    public Object logAround(ProceedingJoinPoint joinPoint, CustomLogAnnotation customLog) throws Throwable {
        if (customLog.enable()) {
            // 方法執行前的處理
            System.out.println("Before method execution: " + joinPoint.getSignature().getName());
            long start = System.currentTimeMillis();
            // 執行目標方法
            Object result = joinPoint.proceed();
            // 方法執行后的處理
            long elapsedTime = System.currentTimeMillis() - start;
            System.out.println("After method execution (" + elapsedTime + 
                               "ms): " + customLog.value());
            return result;
        } else {
            return joinPoint.proceed();
        }
    }
}

(4)使用自定義注解

將自定義注解應用于需要進行日志記錄的方法上,如下代碼所示:

@RestController
public class MyController {
    @CustomLogAnnotation(value = "This is a test method", enable = true)
    @GetMapping("/test")
    public String testMethod() {
        // 業務邏輯代碼
        return "Hello from the annotated method!";
    }
}

2.實際工作中的自定義注解

實際工作中我們通常會使用自定義注解來實現如權限驗證,或者是冪等性判斷等功能。

冪等性判斷是指在分布式系統或并發環境中,對于同一操作的多次重復請求,系統的響應結果應該是一致的。簡而言之,無論接收到多少次相同的請求,系統的行為和結果都應該是相同的。

3.如何實現自定義冪等性注解?

下面我們使用攔截器 + Redis 的方式來實現一下自定義冪等性注解,它的實現步驟如下:

  1. 創建自定義冪等性注解。
  2. 創建攔截器,實現冪等性邏輯判斷。
  3. 配置攔截規則。
  4. 使用自定義冪等性注解。

具體實現如下。

(1)創建自定義冪等性注解

@Retention(RetentionPolicy.RUNTIME) // 程序運行時有效
@Target(ElementType.METHOD) // 方法注解
public @interface Idempotent {
    /**
     * 請求標識符的參數名稱,默認為"requestId"
     */
    String requestId() default "requestId";
    /**
     * 冪等有效時長(單位:秒)
     */
    int expireTime() default 60;
}

(2)創建攔截器

@Component
public class IdempotentInterceptor extends HandlerInterceptorAdapter {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Method method = ((HandlerMethod) handler).getMethod();
        Idempotent idempotent = method.getAnnotation(Idempotent.class);
        if (idempotent != null) {
            // 獲取請求中的唯一標識符
            String requestId = obtainRequestId(request, idempotent.requestId());
            // 判斷該請求是否已經處理過
            if (redisTemplate.opsForValue().get(idempotentKey(requestId)) != null) {
                // 已經處理過,返回冪等響應
                response.getWriter().write("重復請求");
                return false;
            } else {
                // 將請求標識符存入Redis,并設置過期時間
                redisTemplate.opsForValue().set(idempotentKey(requestId), "processed", idempotent.expireTime(), TimeUnit.SECONDS);
                return true; // 繼續執行業務邏輯
            }
        }
        return super.preHandle(request, response, handler);
    }

    private String idempotentKey(String requestId) {
        return "idempotent:" + requestId;
    }

    private String obtainRequestId(HttpServletRequest request, String paramName) {
        // 實現從請求中獲取唯一標識符的方法
        return request.getParameter(paramName);
    }
}

(3)配置攔截器

在 Spring Boot 配置文件類中,添加攔截器配置:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private IdempotentInterceptor idempotentInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(idempotentInterceptor)
         .addPathPatterns("/**"); // 攔截所有接口
    }
}

(4)使用自定義注解

最后,在需要進行冪等控制的 Controller 方法上使用 @Idempotent 注解:

Java
@RestController
public class TestController {
    @PostMapping("/order")
    @Idempotent(requestId = "orderId") // 假設orderId是從客戶端傳來的唯一標識訂單請求的參數
    public String placeOrder(@RequestParam("orderId") String orderId, ...) {
        // 業務處理邏輯
    }
}

這樣,當有相同的請求 ID 在指定的有效期內再次發起請求時,會被攔截器識別并阻止其重復執行業務邏輯。

小結

自定義注解被廣泛應用于日常開發中,像日志記錄、性能監控、權限判斷和冪等性判斷等功能的實現,使用自定義注解來實現是非常方便的。在 Spring Boot 中,使用 @interface 關鍵字來定義自定義注解,之后再使用 AOP 或攔截器的方式實現自定義注解,之后就可以方便的使用自定義注解了。

責任編輯:姜華 來源: 磊哥和Java
相關推薦

2024-01-12 10:05:48

自定義注解SpringJava

2023-10-24 13:48:50

自定義注解舉值驗證

2020-09-04 13:30:43

Java自定義代碼

2024-10-14 17:18:27

2021-12-30 12:30:01

Java注解編譯器

2023-10-11 07:57:23

springboot微服務

2023-10-09 07:37:01

2017-08-03 17:00:54

Springmvc任務執行器

2022-02-17 07:10:39

Nest自定義注解

2024-07-02 11:42:53

SpringRedis自定義

2024-10-09 10:46:41

springboot緩存redis

2020-11-25 11:20:44

Spring注解Java

2021-02-20 11:40:35

SpringBoot占位符開發技術

2022-11-01 11:15:56

接口策略模式

2009-09-07 22:00:15

LINQ自定義

2023-03-30 16:16:00

Java自定義注解開發

2015-02-12 15:33:43

微信SDK

2024-04-03 09:18:03

Redis數據結構接口防刷

2021-11-23 15:06:42

Kubernetes 運維開源

2023-01-03 07:40:27

自定義滑塊組件
點贊
收藏

51CTO技術棧公眾號

麻豆精品一区二区三区视频| 妺妺窝人体色777777| 成年人晚上看的视频| 国产精品不卡| 欧美videos中文字幕| 国模无码视频一区二区三区| 三级外国片在线观看视频| 国产高清不卡一区| 国产精品18久久久久久麻辣| 欧美黑人猛猛猛| 国产一区二区观看| 欧美videofree性高清杂交| 久久精品香蕉视频| 黑人玩欧美人三根一起进| 国产欧美日韩卡一| 国产精品果冻传媒潘| 欧美三级网站在线观看| 在线 亚洲欧美在线综合一区| 亚洲国产你懂的| 欧美裸体网站| 午夜精品一区二区三| 日韩黄色免费网站| 81精品国产乱码久久久久久| 精品无码一区二区三区蜜臀| 日韩av网站在线免费观看| 欧美日韩久久久| 人妻少妇精品无码专区二区| 免费av在线网站| 日本一区免费视频| 加勒比在线一区二区三区观看| 久久av高潮av无码av喷吹| 欧美在线色图| 日韩av在线一区二区| 日本55丰满熟妇厨房伦| 欧美综合社区国产| 91精品福利视频| 国产手机免费视频| 日本孕妇大胆孕交无码| 综合色天天鬼久久鬼色| 亚洲精品国产精品久久| 三级毛片在线免费看| 成人手机电影网| 99视频国产精品免费观看| 在线黄色av网站| 日韩电影在线一区| 国产成人精品一区二区三区| 九九精品免费视频| 性欧美xxxx大乳国产app| 欧美国产日韩一区| 久久久久久久蜜桃| 欧美色123| 成人444kkkk在线观看| 99久久99久久精品国产| 国产精品成久久久久| 精品国产一区二区三区四区在线观看| 亚洲欧美日本一区二区三区| 欧美在线va视频| 色婷婷狠狠综合| 欧美一级片中文字幕| 暖暖成人免费视频| 色94色欧美sute亚洲线路一久 | 国产婷婷色一区二区三区| 国产一区二区视频在线免费观看| 波多野结衣绝顶大高潮| 久久久久久久欧美精品| 国产精品流白浆视频| 国产精品嫩草影院桃色| 国产毛片精品一区| 国产精品亚洲不卡a| 丰满少妇高潮在线观看| 99r国产精品| 日本成人三级| 黄色免费在线观看网站| 亚洲一区在线观看网站| 熟女性饥渴一区二区三区| 88xx成人永久免费观看| 欧美日韩亚洲综合在线| 精品国产鲁一鲁一区二区三区| 都市激情综合| 欧美精选一区二区| 自拍一级黄色片| 国内精品偷拍| 在线成人中文字幕| 91porn在线视频| 国产亚洲激情| 国产在线观看精品| 深爱激情五月婷婷| 国产精品国产三级国产普通话99| 欧洲一区二区在线| 伊人免费在线| 亚洲一区二区成人在线观看| 国产97色在线 | 日韩| 99视频有精品高清视频| 亚洲国产精品va在线观看黑人| 在线视频一二区| 欧美三级自拍| 日韩视频在线一区| 久久免费激情视频| 精品一区二区三区免费视频| 精品久久久久亚洲| 黄网站免费在线播放| 五月综合激情日本mⅴ| 亚洲 激情 在线| 久久综合社区| 久久综合88中文色鬼| 无码视频在线观看| 国产成人精品亚洲日本在线桃色 | 日韩在线观看中文字幕| 亚洲精品久久久久久久久久久| 亚洲欧美激情一区二区三区| 九九久久成人| 欧美老女人在线视频| 91久热免费在线视频| 深夜福利一区二区| 日韩久久久久久久久久久久久| 91tv国产成人福利| 91麻豆国产自产在线观看| 免费久久久久久| 精品欧美一区二区三区在线观看| 色久综合一二码| 国产高潮失禁喷水爽到抽搐| 色中色综合网| 日本精品视频在线观看| 少妇荡乳情欲办公室456视频| 不卡的av网站| 欧美日韩视频免费在线观看| 欧亚在线中文字幕免费| 色综合天天综合狠狠| 国产一卡二卡三卡四卡| 自产国语精品视频| 成人午夜高潮视频| 日本欧美在线视频免费观看| 欧洲国产伦久久久久久久| a级在线观看视频| 妖精视频成人观看www| 国产精品一级久久久| 看女生喷水的网站在线观看| 欧美亚州韩日在线看免费版国语版| 中文字幕视频三区| 99久久久久久中文字幕一区| 国产精品爱久久久久久久| 九色在线播放| 91传媒视频在线播放| 日韩乱码人妻无码中文字幕久久| 久久美女视频| 国产日韩在线视频| 在线观看免费版| 欧美日韩国产欧美日美国产精品| 性生活在线视频| 亚洲欧美一区在线| 国产精品国产精品| 免费看电影在线| 亚洲国产天堂久久国产91 | 欧美激情精品久久久久久黑人 | 午夜时刻免费入口| 国产一区二区三区久久久久久久久| 国产精品高潮在线| 国产露出视频在线观看| 欧美午夜精品理论片a级按摩| 潘金莲一级淫片aaaaa| 欧美日韩福利| 国产91精品入口17c| av片在线观看| 精品国产凹凸成av人导航| 好吊操这里只有精品| 91免费观看视频| 在线观看av日韩| 国产精品国产三级国产在线观看| 欧美一级免费看| 户外极限露出调教在线视频| 在线亚洲一区观看| 无码黑人精品一区二区| 菠萝蜜视频在线观看一区| 久久久久久久久久久久久久国产| 国产美女撒尿一区二区| 91国产高清在线| 粉嫩一区二区三区国产精品| 91精品国产一区二区| 国产无套内射又大又猛又粗又爽 | 久久久久久婷婷| 国产精品一二| 亚洲天堂av免费在线观看| av成人资源| 国产不卡av在线免费观看| 视频免费一区| 亚洲精品国产精品乱码不99按摩| 免费中文字幕在线观看| 91偷拍与自偷拍精品| 成人日韩在线视频| 91久久综合| 一区二区三区在线观看www| 中文字幕一区二区三区四区久久| 蜜月aⅴ免费一区二区三区| 午夜激情小视频| 欧美理论片在线| 日韩欧美国产亚洲| 亚洲视频一二三| 91视频在线网站| 成人精品视频网站| 日韩精品视频一二三| 国产精品夜夜夜| 欧美日韩午夜爽爽| 日韩国产欧美| 精品卡一卡二| 日韩三级不卡| 成人h片在线播放免费网站| 天堂中文在线播放| 欧美风情在线观看| 毛片在线看片| 国产亚洲精品久久久| 人妻无码一区二区三区久久99| 午夜电影网一区| 99视频只有精品| 国产精品视频在线看| 97人妻精品一区二区三区免| 国产一区二区三区黄视频| 亚洲黄色a v| 销魂美女一区二区三区视频在线| 欧美精品在线一区| 操欧美女人视频| 亚洲一区中文字幕| 亚洲成人1区| 国产精品久久久久久久久久| www.成人爱| 2019亚洲男人天堂| 1区2区3区在线| 欧美日韩国产va另类| 羞羞视频在线免费国产| 久久在线免费视频| 欧美18hd| 久久精品夜夜夜夜夜久久| 成人高清网站| 国产一区二区三区在线观看视频| 国产又粗又猛又爽又黄的| 欧美在线视频日韩| 91video| 五月婷婷久久丁香| 亚欧视频在线观看| 婷婷开心激情综合| 日韩伦理在线视频| 亚洲二区在线观看| 亚洲国产精品成人无久久精品| 久久久亚洲国产美女国产盗摄| 欧美在线aaa| 久久精品国产77777蜜臀| 色国产在线视频| 极品少妇xxxx精品少妇偷拍| 亚洲36d大奶网| 麻豆国产精品一区二区三区 | 玖玖精品视频| 欧美日韩在线免费播放| 视频一区欧美精品| 国产精品-区区久久久狼| 麻豆亚洲精品| 性欧美极品xxxx欧美一区二区| 国产综合自拍| 人妻久久久一区二区三区| 99综合视频| 国产欧美高清在线| 免费一区二区视频| 一二三级黄色片| 成人综合激情网| 国产精品久久无码| 久久久久久久综合色一本| 在哪里可以看毛片| 中文字幕制服丝袜一区二区三区 | 日韩精品系列| 国产一区二区三区欧美| 麻豆网站在线免费观看| 欧美日韩福利电影| 小视频免费在线观看| 国产精品视频内| 亚洲一区二区三区免费| 麻豆av一区二区三区| 久久中文字幕二区| 97视频在线免费| 久久亚洲不卡| 樱花草www在线| 99精品在线免费| 精品一区二区6| 亚洲成人av中文| 中文字幕欧美人妻精品一区蜜臀| 国产黄色美女视频| 日韩欧美在线观看| 亚洲熟妇无码久久精品| 欧美成人高清电影在线| 美女毛片在线看| 久久亚洲精品一区二区| 亚洲小少妇裸体bbw| 国产精品中文字幕在线| 久久国产精品免费一区二区三区| 国产精品视频xxx| 一区二区三区欧洲区| 欧美精品一区二区三区在线看午夜 | 亚洲一级二级在线| 国产精品午夜一区二区| 日韩精品资源二区在线| 青青国产在线| 久久视频在线免费观看| 亚洲永久av| 9a蜜桃久久久久久免费| 国内成人自拍| 男女猛烈激情xx00免费视频| 另类的小说在线视频另类成人小视频在线 | 午夜在线a亚洲v天堂网2018| 亚洲精品中文字幕乱码无线| 久久综合精品国产一区二区三区 | 国产av无码专区亚洲av| 亚洲深夜福利视频| a级大胆欧美人体大胆666| 国产精品久久久亚洲| xvideos.蜜桃一区二区| 日韩视频在线免费播放| 日本不卡不码高清免费观看| 久久无码人妻精品一区二区三区| 91色porny蝌蚪| 久久黄色免费视频| 欧美区在线观看| 搞黄视频在线观看| 97视频在线观看成人| 日韩成人精品| 中国成人在线视频| 免费日本视频一区| 人妻少妇一区二区| 欧美日韩激情美女| 韩国av在线免费观看| 欧美成人精品一区| 国产乱码精品一区二区三区亚洲人| 99视频在线| 亚洲综合激情在线| 日韩av片专区| 国产精品成人午夜| 中文在线a天堂| 国产一区二区三区四区福利| 日韩一区二区三区在线免费观看 | 夜夜夜夜夜夜操| 中文字幕免费不卡| 亚洲熟女综合色一区二区三区| 欧美制服丝袜第一页| 成人黄色免费视频| 欧美激情国产日韩精品一区18| 日韩欧美精品一区二区三区| 国产视色精品亚洲一区二区| 亚洲人妖在线| 一区二区三区免费在线观看视频 | 日韩制服一区| 免费看成人av| 天堂在线亚洲视频| 精品人妻无码一区| 欧美日韩日日骚| 国产淫片在线观看| 亚洲专区国产精品| 午夜电影亚洲| 极品白嫩的小少妇| 香蕉加勒比综合久久| 青青草观看免费视频在线| 国产精品99久久久久久白浆小说| 国产一区二区三区亚洲| 亚洲熟妇国产熟妇肥婆| 久久久久国产精品人| 中文在线字幕av| 欧美大尺度激情区在线播放| 一区二区三区免费在线看| 777精品久无码人妻蜜桃| 91欧美一区二区| 国产精品国产精品国产| 久久精视频免费在线久久完整在线看| 国产美女高潮在线| 欧美日韩另类丝袜其他| 久久精品国产亚洲aⅴ | 伊人久久大香线蕉无限次| 大香煮伊手机一区| 亚洲欧美偷拍另类a∨色屁股| 亚洲成人第一网站| 日韩在线播放一区| 亚洲高清999| 日本成人在线免费视频| 亚洲视频在线观看一区| 亚洲av成人精品一区二区三区在线播放 | a级在线观看| 精品不卡一区二区三区| 男女激情视频一区| 国产在线拍揄自揄拍无码视频| 欧美一区二区网站| 男人久久天堂| 亚洲第一综合网站| 91老司机福利 在线| 国产精品一二三四五区| 欧美亚洲日本黄色| 99re6这里只有精品| zjzjzjzjzj亚洲女人| 欧美无砖砖区免费| av电影在线地址| 亚洲一区二区不卡视频| 懂色中文一区二区在线播放| 国产在线观看第一页| 欧美精品久久久久久久久| 日韩精品2区| 日韩人妻无码一区二区三区| 51精品秘密在线观看|