# Java中注解怎么用
## 一、注解的基本概念
### 1.1 什么是注解
注解(Annotation)是Java 5引入的一種元數據形式,它提供了一種向代碼添加額外信息的機制。注解本身不會直接影響代碼邏輯,但可以被編譯器、開發工具或運行時環境讀取并執行相應操作。
```java
@Override
public String toString() {
return "This is an example";
}
@Override幫助檢查方法重寫@Deprecated標記已過時的方法| 注解 | 作用 |
|---|---|
@Override |
表示方法重寫父類方法 |
@Deprecated |
標記方法/類已過時 |
@SuppressWarnings |
抑制編譯器警告(如”unchecked”) |
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "";
}
| 元注解 | 描述 |
|---|---|
@Target |
指定注解可應用的目標(類、方法、字段等) |
@Retention |
指定注解保留策略(SOURCE/CLASS/RUNTIME) |
@Documented |
表示注解應包含在Javadoc中 |
@Inherited |
允許子類繼承父類的注解 |
@Repeatable |
表示注解可以在同一位置重復使用 |
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Author {
String name();
String date();
int version() default 1;
}
@Author(name = "John", date = "2023-10-01", version = 2)
public class MyClass {
@Author(name = "John", date = "2023-10-02")
public void myMethod() {}
}
Class<?> clazz = MyClass.class;
if (clazz.isAnnotationPresent(Author.class)) {
Author author = clazz.getAnnotation(Author.class);
System.out.println("Author: " + author.name());
}
Method method = clazz.getMethod("myMethod");
Author methodAuthor = method.getAnnotation(Author.class);
Field field = clazz.getDeclaredField("fieldName");
if (field.isAnnotationPresent(MyFieldAnnotation.class)) {
// 處理字段注解
}
@SupportedAnnotationTypes("com.example.MyAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class MyAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
// 處理邏輯
return true;
}
}
processingEnv:獲取處理環境roundEnv.getElementsAnnotatedWith():獲取被注解的元素Filer:生成新源文件@Test
@DisplayName("Should return correct result")
void testCalculation() {
assertEquals(4, 2+2);
}
@RestController
@RequestMapping("/api")
public class MyController {
@Autowired
private MyService service;
@GetMapping("/users")
public List<User> getUsers() {
return service.getAllUsers();
}
}
@Data
@Builder
@AllArgsConstructor
public class User {
private Long id;
private String name;
}
@Inherited的作用范圍(僅對類有效)@Retention導致運行時無法獲取@Repeatable(Schedules.class)
public @interface Schedule {
String time();
}
@Schedule(time = "10:00")
@Schedule(time = "15:00")
public void scheduledTask() {}
public void process(@NonNull String input) {
Objects.requireNonNull(input);
}
public class Box<@CustomAnnotation T> {
public void set(@CustomAnnotation T content) {}
}
Java注解作為強大的元編程工具,已經深度集成到現代Java開發中。從基礎的@Override到復雜的框架注解,合理使用注解可以:
- 顯著減少樣板代碼
- 提高代碼可讀性
- 實現聲明式編程
- 增強編譯時檢查
隨著Java語言的發展,注解功能仍在不斷增強(如Java 17引入的模式匹配增強),掌握注解的使用是Java開發者必備的核心技能之一。
注意:本文示例基于Java 11環境,部分特性可能需要更高版本支持。實際開發時應根據項目使用的Java版本進行調整。 “`
這篇文章共計約2100字,涵蓋了Java注解的核心知識點,包括: 1. 基本概念和內置注解 2. 自定義注解開發詳解 3. 運行時和編譯時處理 4. 實際框架應用案例 5. 最佳實踐和高級特性
采用Markdown格式,包含代碼塊、表格等元素增強可讀性,適合作為技術博客或開發文檔。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。