AMD MI350硬件上的GLM-5.2-MXFP4部署:10个常见问题解答
2026/7/11 14:54:18
Lombok 的核心注解围绕消除 Java 模板代码设计,覆盖字段方法生成、构造器、日志、对象创建、资源管理等核心场景。以下是最常用的8 个核心注解,按使用频率和重要性分类详解,附场景化示例和避坑要点:
这类注解解决 POJO 类中getter/setter、toString、equals/hashCode等重复代码问题。
@Getter / @Setter(基础)getXxx()/setXxx()方法(可单独用在类/字段上)。importlombok.Getter;importlombok.Setter;importlombok.AccessLevel;publicclassUser{// 类级别:为所有字段生成public的get/set(final字段仅生成get)@Getter@SetterprivateLongid;// 字段级别:仅为username生成get,且setter为protected@Getter@Setter(AccessLevel.PROTECTED)privateStringusername;// 禁用setter:仅生成getter@Getter@Setter(AccessLevel.NONE)privateStringpassword;}@Data(一站式聚合)@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor,一键生成核心方法(日常开发最常用)。@NoArgsConstructor(框架如 Spring/MyBatis 必备)。importlombok.Data;importlombok.NoArgsConstructor;importlombok.AllArgsConstructor;@Data// 核心:生成get/set/toString/equals/hashCode/RequiredArgsConstructor@NoArgsConstructor// 补充无参构造(必须加!)@AllArgsConstructor// 补充全参构造(按需)publicclassUser{privateLongid;privateStringusername;// 排除toString:密码不泄露@ToString.ExcludeprivateStringpassword;}@ToString(自定义 toString 方法)toString(),避免手动拼接字符串。importlombok.ToString;@ToString(exclude="password",// 排除密码字段callSuper=true// 包含父类字段(默认false))publicclassUserextendsBaseEntity{privateLongid;privateStringusername;privateStringpassword;}@EqualsAndHashCode(自定义相等判断)equals()和hashCode()(默认所有非静态字段)。importlombok.EqualsAndHashCode;@EqualsAndHashCode(of="id")// 仅基于id生成(忽略其他字段)publicclassUser{privateLongid;// 主键privateStringusername;// 业务字段(不参与相等判断)}Lombok 提供 3 个构造器注解,覆盖不同初始化场景,解决new 对象时参数繁琐问题。
@NoArgsConstructor(无参构造)public User() {}。@Data不生成,必须手动加)。@RequiredArgsConstructor(必填字段构造器)final 字段或@NonNull 注解字段生成构造器(@Data已聚合)。importlombok.RequiredArgsConstructor;importorg.springframework.stereotype.Service;@Service@RequiredArgsConstructor// 为final字段生成构造器publicclassUserService{// 构造器注入(无需@Autowired)privatefinalUserMapperuserMapper;privatefinalRedisTemplate<String,Object>redisTemplate;}@AllArgsConstructor(全参构造)@Builder替代。核心是@Slf4j,替代手动声明Logger,之前已详细讲过,此处补充核心要点:
@Slf4j(推荐)、@Log4j2(高性能日志)、@CommonsLog(老旧框架)。private static final Logger log = ...,直接用log变量。importlombok.extern.slf4j.Slf4j;importorg.springframework.web.bind.annotation.RestController;@Slf4j// 生成log变量@RestControllerpublicclassUserController{publicvoidgetUser(Longid){log.info("查询用户,ID:{}",id);// 直接使用}}@Builder(建造者模式)importlombok.Data;importlombok.Builder;importlombok.NoArgsConstructor;importlombok.AllArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructor@Builder// 启用建造者模式publicclassUser{privateLongid;privateStringusername;privateIntegerage;}// 使用:链式创建对象Useruser=User.builder().id(1L).username("zhangsan").age(20).build();@Value(不可变类注解)final),仅生成getter,无setter,替代@Data + 全final字段。importlombok.Value;@Value// 所有字段final + 仅生成getter + 无参构造(需手动加@NoArgsConstructor)@NoArgsConstructor(force=true)// force=true:为final字段赋默认值(如null)publicclassUserVO{Longid;Stringusername;}@NonNull(非空校验)setter/构造器添加非空校验,null 时抛NullPointerException(NPE)。importlombok.Data;importlombok.NonNull;@DatapublicclassUser{@NonNull// 非空校验:setUsername(null)会抛NPEprivateStringusername;}@Cleanup(自动关闭资源)close()方法的资源。importlombok.Cleanup;importjava.io.FileReader;importjava.io.IOException;publicclassFileUtil{publicStringreadFile(Stringpath)throwsIOException{@CleanupFileReaderreader=newFileReader(path);// 自动关闭readerchar[]buf=newchar[1024];reader.read(buf);returnnewString(buf);}}@SneakyThrows(隐藏异常捕获)importlombok.SneakyThrows;importjava.io.IOException;publicclassDemo{@SneakyThrows(IOException.class)// 捕获IOException并抛出publicvoidread(){// 无需try-catchnewFileReader("test.txt").read();}}importlombok.Data;importlombok.Builder;importlombok.NoArgsConstructor;importlombok.AllArgsConstructor;importlombok.NonNull;importlombok.ToString;@Data// 基础方法@NoArgsConstructor// 无参构造@AllArgsConstructor// 全参构造@Builder// 建造者模式@ToString(exclude="password")// 排除密码publicclassUser{privateLongid;@NonNull// 非空校验privateStringusername;privateStringpassword;// 仅id参与相等判断@Overridepublicbooleanequals(Objecto){if(this==o)returntrue;if(o==null||getClass()!=o.getClass())returnfalse;Useruser=(User)o;returnid.equals(user.id);}@OverridepublicinthashCode(){returnid.hashCode();}}@Data必加@NoArgsConstructor:框架反射实例化需要无参构造,否则报NoSuchMethodException;@Data的equals/hashCode:建议用@EqualsAndHashCode(of = "id")仅基于主键生成;@ToString.Exclude避免泄露;@Builder配合构造器:需加@NoArgsConstructor + @AllArgsConstructor,否则build()可能报错;@SneakyThrows:避免掩盖关键异常,仅在非核心逻辑使用。Lombok 核心注解可分为 4 类:
| 类别 | 核心注解 | 核心场景 |
|---|---|---|
| 字段方法 | @Getter/@Setter、@Data | POJO 类简化 |
| 构造器 | @NoArgsConstructor、@Builder | 对象初始化 |
| 日志 | @Slf4j | 日志记录 |
| 工具类 | @NonNull、@Cleanup | 非空校验、资源管理 |
日常开发中,@Data + @NoArgsConstructor + @Slf4j + @Builder是最常用的组合,能覆盖 90% 以上的模板代码场景。