註釋 給程序員看,編譯器直接忽略;註解 給編譯器/框架/工具看,保留在字節碼甚至運行時,驅動代碼生成、檢查、注入等自動化行為。
| 語法 | 用途 | 生命周期 |
|---|---|---|
// 單行 | 代碼說明、TODO、臨時屏蔽 | 僅源碼 |
/* 多行 */ | 大段邏輯解釋、版權聲明 | 僅源碼 |
/** 文檔註釋 */ | 生成 API 文檔 (Javadoc) | 源碼 → HTML 文檔 |
@Retention(RetentionPolicy.SOURCE) // 僅源碼階段保留 (如 @Override, @SuppressWarnings)
@Retention(RetentionPolicy.CLASS) // 編譯進 .class,JVM 不加載 (默認)
@Retention(RetentionPolicy.RUNTIME) // 運行時可通過反射獲取 (框架核心)
@Entity
@Table(name = "users")
public class User {
@Id @GeneratedValue
private Long id;
@Column(name = "username", nullable = false, length = 50)
private String username;
@Transient // 不映射到數據庫
private String tempToken;
}
Hibernate 啟動時,通過反射掃描實體類上的註解,構建元數據模型,自動生成建表 SQL、CRUD 語句。開發者**聲明式**定義映射關係,框架**自動化**處理樣板代碼。
@Data 編譯期自動生成 getter/setter/toString/equals/hashCode。@Mapper 編譯期生成高性能 Bean 映射實現類。@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimit {
int maxRequests() default 100;
long windowMs() default 60000;
}
// 切面攔截
@Around("@annotation(rateLimit)")
public Object limit(ProceedingJoinPoint pjp, RateLimit rateLimit) {
// 根據 rateLimit.maxRequests()... 實現限流邏輯
}
註解是**元數據**,將「什麼意思」從邏輯代碼中剝離,交給框架/工具在編譯期/運行時解讀執行。善用註解 = 寫更少樣板代碼 + 讓意圖更清晰 + 享受框架自動化紅利。