Custom Annotation trong Spring Boot

3 min read

Annotations trong Java là một công cụ mạnh mẽ để cung cấp thông tin metadata cho trình biên dịch và runtime. Trong Spring Boot, các annotation đóng vai trò cốt lõi để cấu hình và kiểm soát hành vi của ứng dụng. Nhưng đôi khi, những annotation mặc định không đủ để đáp ứng các nhu cầu đặc thù. Đó là lúc Custom Annotation phát huy sức mạnh của mình.

1. Custom Annotation là gì?

Custom Annotation là các annotation do developer tự định nghĩa nhằm mở rộng chức năng của các annotation mặc định trong Java hoặc framework. Chúng ta sử dụng Custom Annotation để biểu diễn ý nghĩa đặc biệt hoặc triển khai một logic xử lý riêng.

Ví dụ: Annotation @RestController trong Spring kết hợp @Controller@ResponseBody. Tương tự, có thể tạo một annotation riêng như @CustomLog để tự động log thông tin khi một method được gọi.

2. Lợi ích của Custom Annotation

  • Tăng khả năng tái sử dụng code, thay vì lặp lại logic ở nhiều nơi, có thể định nghĩa một annotation dùng chung, giúp tái sử dụng code.
  • Giúp code gọn gàng, clean hơn.

3. Cách triển khai Custom Annotation trong Spring Boot

Tạo Annotation

Tạo annotation có tên @CustomLog để log thông tin khi một phương thức được gọi.

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD) // Annotation áp dụng cho method
@Retention(RetentionPolicy.RUNTIME) // Annotation tồn tại ở runtime để reflection có thể truy cập
public @interface CustomLog {
    String value() default "INFO"; // Cho phép truyền tham số mức log
}

Xử lý Annotation bằng AOP

Spring AOP giúp can thiệp vào luồng thực thi của phương thức có sử dụng annotation.

Sử dụng Custom Annotation

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @CustomLog("DEBUG") // Áp dụng Custom Annotation
    @GetMapping("/test1")
    public String test1() {
        return "Hello from @CustomLog!1";
    }

    @CustomLog("INFO") // Áp dụng Custom Annotation
    @GetMapping("/test2")
    public String test2() {
        return "Hello from @CustomLog!2";
    }
}

Có thể sử dụng anotation CustomLog cho nhiều method khác nhau.
Ngoài custome anotation cho method, chúng ta có thể custome anotation cho class như sau:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE) // Annotation này chỉ áp dụng cho class
@Retention(RetentionPolicy.RUNTIME) // Annotation tồn tại ở runtime
public @interface CustomLog {
    String value() default "INFO"; // Tham số tùy chọn để chỉ định mức độ log
}


Bằng cách thay đổi giá trị của ElementType trong @Target, chúng ta có thể tùy chỉnh annotation để áp dụng cho class hoặc method tùy theo nhu cầu.

4. Kết luận

Custom Annotation trong Java, đặc biệt là trong Spring Boot, là một công cụ mạnh mẽ giúp mở rộng khả năng của ứng dụng, tăng tính tái sử dụng và giảm sự phức tạp trong code. Việc tự tạo annotation cho phép thiết kế các giải pháp phù hợp với nhu cầu đặc thù, đồng thời giữ cho code dễ đọc và maintain.

Tuy nhiên, cần lưu ý Custom Annotation cũng có thể làm tăng độ phức tạp và khó khăn trong việc debug nếu lạm dụng. Vì vậy, hãy sử dụng chúng một cách hợp lý, tập trung vào việc giải quyết các vấn đề thực tế gặp phải trong dự án.

Tham khảo: https://www.baeldung.com/java-custom-annotation

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *