当前位置: 首页 > news >正文

Lombok常用注解总结

@RequiredArgsConstructor注解

1.示例

在类上添加@RequiredArgsConstructor注解,Lombok会自动生成一个构造函数,该构造函数包含类中所有final字段和被@NonNull注解标注的字段。示例如下:

import lombok.NonNull;
import lombok.RequiredArgsConstructor;@RequiredArgsConstructor
public class User {private final Long id;@NonNullprivate String name;private Integer age; // 普通字段不会出现在构造函数中
}

上面的代码经过编译后,会生成如下构造函数:

public User(Long id, @NonNull String name) {if (name == null) {throw new NullPointerException("name is marked non-null but is null");}this.id = id;this.name = name;
}
2.用于Spring Bean的构造函数注入

@RequiredArgsConstructor常常和@Autowired一起使用,以此实现Spring Bean的构造函数注入。
示例:

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;@Service
@RequiredArgsConstructor
public class UserService {private final UserRepository userRepository; // final字段private final EmailService emailService;    // final字段
}

编译之后,会生成如下构造函数:

@Service
public class UserService {private final UserRepository userRepository;private final EmailService emailService;public UserService(UserRepository userRepository, EmailService emailService) {this.userRepository = userRepository;this.emailService = emailService;}
}

Spring 4.3 之后无需显式使用 @Autowired
在 Spring 4.3 及后续版本中,如果一个类只有唯一的构造函数,那么这个构造函数的 >@Autowired 注解是可以省略的。Spring 能够自动识别并完成依赖注入。例如:

@Service
@RequiredArgsConstructor // 生成唯一的构造函数
public class UserService {private final UserRepository userRepository;
}

上面的代码在编译之后会生成如下构造函数:

public UserService(UserRepository userRepository) {this.userRepository = userRepository;
}

此时,Spring 会自动注入 UserRepository,无需添加 @Autowired
存在多个构造函数时需要显式使用 @Autowired
当类中存在多个构造函数,并且你希望 Spring 使用特定的构造函数时,就需要显式添加 >@Autowired 注解。示例如下:

@Service
@RequiredArgsConstructor // 生成构造函数1
public class UserService {private final UserRepository userRepository;@Autowired // 显式指定使用这个构造函数public UserService(UserRepository userRepository, OtherService otherService) {this.userRepository = userRepository;// 其他逻辑}
}
注意事项
  1. final字段必须初始化:如果类中有final字段,那么这些字段必须在构造函数中进行初始化,否>则会出现编译错误。
  2. 避免与@AllArgsConstructor同时使用@RequiredArgsConstructor@AllArgsConstructor都用>于生成构造函数,同时使用可能会造成冲突。
  3. 静态字段被忽略:静态字段不会参与构造函数的生成。
  4. 参数顺序:构造函数中参数的顺序和类中字段的声明顺序是一致的。

相关文章:

  • HW蓝队工作流程
  • 为什么你的vue项目连接不到后端
  • 【机器学习实战笔记 12】集成学习:AdaBoost算法
  • Odoo 18 固定资产管理自动化指南
  • 基于深度学习的智能图像超分辨率技术:技术与实践
  • 【Python进阶系列】第10篇:Python 项目的结构设计与目录规范 —— 从脚本到模块,从混乱到整洁
  • LeetCode热题100—— 118. 杨辉三角
  • 关于ubuntu环境下vscode进行debug的随笔
  • Self-supervised Learning(BERT/GPT/T5)
  • Mac中Docker Desktop无法使用,可使用OrbStack
  • 前端页面Javascript数组
  • 25.Hybrid+安卓项目调试方法
  • Java素数筛法:BitSieve类的精妙设计
  • 【无标题】对拓扑对偶框架关键质疑的深度解答
  • 【Java学习笔记】线程基础
  • 【Dify 案例】【自然语言转SQL案例】【五】【实战二】【财务管理查询商品信息数据】
  • 有哪些东西东西时间越长越值钱?做哪些事时间越长越值钱?伪长期增值陷阱​ 打造财富复利成长策略
  • 第十三章 模板
  • Spring Aop @AfterThrowing (异常通知): 使用场景
  • Cesium、ThreeWebGL详解(二)渲染引擎向GPU传数据、性能优化、引擎对比
  • wordpress 适合外贸站/网络营销怎么推广
  • 桂林旅游网站建设/长尾关键词快速排名软件
  • 网站建设伍金手指下拉7/网络服务商在哪咨询
  • 微信小程序与网站连接/文章代写
  • 医院网站建设的目的/东莞做网站哪家公司好
  • 石景山网站制作案例/阿里指数查询