news 2025/12/19 2:19:36

lombok的几个核心注解是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
lombok的几个核心注解是什么?

Lombok 的核心注解围绕消除 Java 模板代码设计,覆盖字段方法生成、构造器、日志、对象创建、资源管理等核心场景。以下是最常用的8 个核心注解,按使用频率和重要性分类详解,附场景化示例和避坑要点:

一、基础字段方法简化注解(最核心)

这类注解解决 POJO 类中getter/settertoStringequals/hashCode等重复代码问题。

1.@Getter / @Setter(基础)
  • 核心作用:为类的字段生成getXxx()/setXxx()方法(可单独用在类/字段上)。
  • 使用场景:仅需生成部分字段的 get/set,或自定义访问权限。
  • 示例
    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;}
2.@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;}
3.@ToString(自定义 toString 方法)
  • 核心作用:生成包含指定字段的toString(),避免手动拼接字符串。
  • 进阶用法:排除敏感字段、包含父类字段。
  • 示例
    importlombok.ToString;@ToString(exclude="password",// 排除密码字段callSuper=true// 包含父类字段(默认false))publicclassUserextendsBaseEntity{privateLongid;privateStringusername;privateStringpassword;}
4.@EqualsAndHashCode(自定义相等判断)
  • 核心作用:基于指定字段生成equals()hashCode()(默认所有非静态字段)。
  • ORM 场景必调:JPA/MyBatis 实体类建议仅基于主键(id)生成,避免业务字段修改导致 hash 变化。
  • 示例
    importlombok.EqualsAndHashCode;@EqualsAndHashCode(of="id")// 仅基于id生成(忽略其他字段)publicclassUser{privateLongid;// 主键privateStringusername;// 业务字段(不参与相等判断)}

二、构造器注解(解决对象初始化)

Lombok 提供 3 个构造器注解,覆盖不同初始化场景,解决new 对象时参数繁琐问题。

1.@NoArgsConstructor(无参构造)
  • 核心作用:生成无参构造器public User() {}
  • 必用场景:Spring MVC 接收参数、MyBatis 反射实例化、Jackson 反序列化等(@Data不生成,必须手动加)。
2.@RequiredArgsConstructor(必填字段构造器)
  • 核心作用:为final 字段@NonNull 注解字段生成构造器(@Data已聚合)。
  • 使用场景:依赖注入(如 Spring 构造器注入)。
  • 示例
    importlombok.RequiredArgsConstructor;importorg.springframework.stereotype.Service;@Service@RequiredArgsConstructor// 为final字段生成构造器publicclassUserService{// 构造器注入(无需@Autowired)privatefinalUserMapperuserMapper;privatefinalRedisTemplate<String,Object>redisTemplate;}
3.@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);// 直接使用}}

四、高级对象创建注解

1.@Builder(建造者模式)
  • 核心作用:生成链式调用的建造者方法,替代繁琐的 setXxx() 或全参构造。
  • 使用场景:对象参数多、可选参数多的场景(如创建复杂实体)。
  • 示例
    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();
2.@Value(不可变类注解)
  • 核心作用:生成“不可变类”(所有字段默认final),仅生成getter,无setter,替代@Data + 全final字段
  • 使用场景:DTO/VO 等无需修改的对象(如接口返回值)。
  • 示例
    importlombok.Value;@Value// 所有字段final + 仅生成getter + 无参构造(需手动加@NoArgsConstructor)@NoArgsConstructor(force=true)// force=true:为final字段赋默认值(如null)publicclassUserVO{Longid;Stringusername;}

五、实用工具注解

1.@NonNull(非空校验)
  • 核心作用:为字段的setter/构造器添加非空校验,null 时抛NullPointerException(NPE)。
  • 示例
    importlombok.Data;importlombok.NonNull;@DatapublicclassUser{@NonNull// 非空校验:setUsername(null)会抛NPEprivateStringusername;}
2.@Cleanup(自动关闭资源)
  • 核心作用:自动关闭 IO 流/连接(替代 try-finally),支持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);}}
3.@SneakyThrows(隐藏异常捕获)
  • 核心作用:自动捕获受检异常并包装为运行时异常,无需手动 try-catch。
  • 使用场景:简化代码(谨慎使用,避免掩盖异常)。
  • 示例
    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();}}

四、避坑核心要点

  1. @Data必加@NoArgsConstructor:框架反射实例化需要无参构造,否则报NoSuchMethodException
  2. ORM 实体类慎用@Dataequals/hashCode:建议用@EqualsAndHashCode(of = "id")仅基于主键生成;
  3. 敏感字段必排除:密码/令牌用@ToString.Exclude避免泄露;
  4. @Builder配合构造器:需加@NoArgsConstructor + @AllArgsConstructor,否则build()可能报错;
  5. 生产环境禁用@SneakyThrows:避免掩盖关键异常,仅在非核心逻辑使用。

总结

Lombok 核心注解可分为 4 类:

类别核心注解核心场景
字段方法@Getter/@Setter@DataPOJO 类简化
构造器@NoArgsConstructor@Builder对象初始化
日志@Slf4j日志记录
工具类@NonNull@Cleanup非空校验、资源管理

日常开发中,@Data + @NoArgsConstructor + @Slf4j + @Builder是最常用的组合,能覆盖 90% 以上的模板代码场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/12 17:33:57

智能缺陷跟踪系统的构建

缺陷管理的新范式 在软件测试领域&#xff0c;缺陷跟踪是确保产品质量的核心环节。随着人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术的快速发展&#xff0c;传统缺陷跟踪系统正逐步向智能化转型。本文旨在为软件测试从业者提供一个构建智能缺…

作者头像 李华
网站建设 2025/12/12 17:33:55

预测缺陷重现的机器学习模型在软件测试中的应用研究

缺陷重现的挑战与机器学习机遇 在软件测试实践中&#xff0c;缺陷重现始终是核心痛点。测试人员常遇到"偶现缺陷"——某些缺陷在特定条件下随机出现&#xff0c;难以稳定复现以进行根因分析。这类问题不仅拖延项目进度&#xff0c;还可能导致潜在线上风险。传统方法…

作者头像 李华
网站建设 2025/12/12 17:33:53

缺陷根因分析的AI辅助工具:从“救火”到“防火”的智能跃迁

软件测试的困境与AI的曙光 在敏捷开发与DevOps大行其道的今天&#xff0c;软件发布的频率空前加快&#xff0c;对软件质量的要求却有增无减。软件测试工程师常常陷入一个怪圈&#xff1a;他们能够高效地发现大量缺陷&#xff08;Bug&#xff09;&#xff0c;但对于“这个缺陷为…

作者头像 李华
网站建设 2025/12/12 17:33:38

AI生成高质量测试数据的秘诀

测试数据的智能化转型 在软件测试领域&#xff0c;高质量测试数据是确保应用稳定性和安全性的基石。传统手动数据生成方式常面临效率低下、覆盖面不足等挑战&#xff0c;而AI技术的引入&#xff0c;通过机器学习、生成对抗网络&#xff08;GAN&#xff09;和自然语言处理&…

作者头像 李华
网站建设 2025/12/12 17:33:26

通达信减仓卖出线 源码 贴图

{}VAR2:LLV(LOW,10); VAR3:HHV(HIGH,25); 减仓线: 3.2 ; 卖出线: 3.5; 动力线: EMA((CLOSE-VAR2)/(VAR3-VAR2)*4,4); 买入线: 0.3;{} DRAWTEXT(CROSS(动力线,减仓线),2.8,减仓 ), ,; DRAWTEXT(CROSS(动力线,卖出线),3.5,出局 ), , ; DRAWICON(CROSS(动力线,减仓线),3.4,2); DRA…

作者头像 李华
网站建设 2025/12/12 17:33:21

构建面向未来的智能监控测试基础设施

在数字化进程飞速发展的今天&#xff0c;软件系统的复杂度和迭代速度呈指数级增长。传统的软件测试方法&#xff0c;因其滞后性、高成本以及对人力资源的重度依赖&#xff0c;正日益面临严峻挑战。在此背景下&#xff0c;‌智能监控测试基础设施‌应运而生&#xff0c;它不仅是…

作者头像 李华