Annotation in Java

trieu.dev.da

Nguyễn Thanh Triều


Annotation

  • Annotation cung cấp một cách để liên kết meta-data (dữ liệu về dữ liệu, chú thích) với các thành phần của chương trình Java
  • Tại thời gian dịch và thời gian chạy. Annotation có thể áp dụng cho package, class, method, constructor, tham chiếu và biến.
Chức năng của Annotation trong Java:

  1. chỉ dẫn cho trình biên dịch (Compiler)
  2. chỉ dẫn trong thời điểm biên dịch (Build-time)
  3. chỉ dẫn trong thời gian chạy (Runtime)
1. Java Annotation được tích hợp để sử dụng trực tiếp trong code Java:

Annotation được dùng như meta-data (chú thích)
  • @Override : đánh dấu một phương thức nạp chồng.
  • @Deprecated : đánh dấu một phương thức đã lạc hậu. Phải có chú thích kèm theo để giải thích vì sao phương thức lạc hậu và cách thay thế có thể.
  • @SuppressWarnings: báo trình biên dịch ngăn chặn cảnh báo, có thể chỉ rõ loại cảnh báo, deprecated hoặc unchecked.

1682560801969.png

Java Annotation được tích hợp sẵn được sử dụng trong Annotation khác.
  • @Target: sử dụng để chỉ định các đối tượng mà một annotation có thể được áp dụng. Nó giúp giới hạn phạm vi áp dụng của một annotation
    • ElementType.TYPE: Áp dụng cho các đối tượng kiểu lớp (class, interface, enum).
    • ElementType.FIELD: Áp dụng cho các trường (fields), bao gồm cả các trường cục bộ (local fields).
    • ElementType.METHOD: Áp dụng cho các phương thức (methods).
    • ElementType.PARAMETER: Áp dụng cho các tham số (parameters) của phương thức hoặc constructor.
    • ElementType.CONSTRUCTOR: Áp dụng cho các constructor (hàm khởi tạo) của lớp.
    • ElementType.LOCAL_VARIABLE: Áp dụng cho các biến cục bộ (local variables) trong một phương thức hoặc khối mã (block).
    • ElementType.ANNOTATION_TYPE: Áp dụng cho các annotation khác.
    • ElementType.PACKAGE: Áp dụng cho các gói (packages).
    • ElementType.TYPE_PARAMETER: Áp dụng cho các tham số kiểu (type parameters) của các lớp, giao diện hoặc phương thức thông qua generics.
    • ElementType.TYPE_USE: Áp dụng cho các loại sử dụng kiểu (type uses), ví dụ như trong khai báo biến, kiểu trả về của phương thức, hoặc trong khai báo đối số của phương thức.
1682560819652.png

2. Java Annotation được tích hợp sẵn được sử dụng trong Annotation khác.
  • @Retention: Sử dụng để chỉ định thời gian tồn tại của một annotation trong quá trình thực thi của chương trình.
    • RetentionPolicy.SOURCE: Annotation chỉ tồn tại trong mã nguồn Java, không được giữ lại trong file biên dịch (compiled bytecode) và không thể truy cập trong thời gian thực thi.
    • RetentionPolicy.CLASS: Annotation được giữ lại trong file biên dịch (compiled bytecode), nhưng không được giữ lại trong thời gian thực thi của chương trình Java. Đây là giá trị mặc định của @Retention nếu không được chỉ định.
    • RetentionPolicy.RUNTIME: Annotation được giữ lại trong file biên dịch (compiled bytecode) và có thể truy cập và sử dụng trong thời gian thực thi của chương trình Java thông qua Java Reflection API.

1682560845571.png

  • @Inherited : Sử dụng để chỉ định liệu một annotation có được kế thừa từ lớp cha đến lớp con hay không.
1682560856721.png

@Documented : Sử dụng để đánh dấu một annotation khác, cho phép nó được ghi vào tài liệu (documentation) của mã nguồn.
1682560871743.png

Khởi tạo Annotation (Annotation tự định nghĩa):
Annotation khá giống một interface, để khai báo một Annotation chúng ta sử dụng @interface.
Một phần tử của Annotation có các đặc điểm như sau:
  1. Không có thân hàm
  2. Không có tham số hàm
  3. Khai báo trả về phải là một kiểu dữ liệu cụ thể (Kiểu nguyên thủy, Enum, Annotation hoặc Class).
  4. Có thể có giá trị mặc định.
Mình sẽ tạo 3 custom annotation với mục tiêu tuần tự hóa một đối tượng thành một chuỗi JSON
  1. Sử dụng cho phạm vi Class
1682560947678.png

  1. Sử dụng cho phạm vi method
1682560982254.png

  1. Sử dụng cho phạm vi field
1682560990873.png
 
Bên trên