Lombok 是一個 Java 庫,透過編譯期註解處理器(Annotation Processor),自動生成 Getter/Setter、toString、equals/hashCode、建構子等樣板代碼,讓 POJO 類別保持精簡,專注於業務邏輯。
lombok.jar(官網或 Maven Central)。eclipse.ini 同目錄。eclipse.ini,末尾新增:-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar
java -jar lombok.jar 可視覺化安裝向導。Settings → Plugins → Marketplace 搜尋 "Lombok" 安裝。Settings → Build,Execution,Deployment → Compiler → Annotation Processors 勾選 Enable annotation processing。pom.xml 加入依賴:<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.x</version><scope>provided</scope></dependency>。<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
| 註解 | 作用範圍 | 生成內容 |
|---|---|---|
@Data | 類別 | @Getter/@Setter/@ToString/@EqualsAndHashCode/@RequiredArgsConstructor 綜合 |
@Getter/@Setter | 類別/欄位 | 單屬性或所有屬性的存取器 |
@ToString | 類別 | 可自訂 includeFieldNames、exclude、callSuper |
@EqualsAndHashCode | 類別 | 可指定 exclude、callSuper、onlyExplicitlyIncluded |
@NoArgsConstructor | 類別 | 無參建構子(可 @NoArgsConstructor(force=true) 強制生成) |
@AllArgsConstructor | 類別 | 全參建構子 |
@RequiredArgsConstructor | 類別 | 針對 final 或 @NonNull 欄位生成建構子 |
@Builder | 類別/方法 | 建造者模式,支援鏈式調用 |
@Slf4j/@Log4j2/@Log | 類別 | 自動生成 private static final Logger log = ... |
@NonNull | 欄位/參數 | 生成非空檢查,拋 NullPointerException |
@Value | 類別 | 不可變類別:final 欄位、@Getter、@AllArgsConstructor、@ToString、@EqualsAndHashCode |
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Slf4j
public class User {
private Long id;
private String username;
@NonNull private String email;
private int age;
public static void main(String[] args) {
User user = User.builder()
.id(1L)
.username("tom")
.email("tom@example.com")
.age(25)
.build();
log.info("User: {}", user); // 自動 toString
}
}
@Builder,子類用 @SuperBuilder (Lombok 1.18.12+)。@ToString(exclude = "password")、@EqualsAndHashCode(exclude = "id") 避免敏感資料洩露或循環引用。@Data 包含 @RequiredArgsConstructor,若需無參建構子必須顯式加 @NoArgsConstructor。@Data(equals/hashCode 可能觸發懶加載),建議手寫或用 @Getter/@Setter + @ToString(of=...)。.class 檔已含代碼,反編譯可見,運行期零依賴(provided scope)。執行 mvn lombok:delombok 將註解展開為實際 Java 代碼,輸出至 target/generated-sources/delombok,方便移除 Lombok 依賴或 Code Review。