一.@RequiredArgsConstructor注解是什么,能用来干什么?
@RequiredArgsConstructor是Lombok中的一个注解,类似于@Autowired注解,主要的功能就是可以减少@Autowired的书写,我们在写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的@Autowired注解,代码看起来很繁琐。
总结:类上加上@RequiredArgsConstructor,需要注入的类要用final声明。
二.使用前提条件
1.引入lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<optional>true</optional>
</dependency>
2.在要使用的类前加上注解
3.将要注入的接口或其他用final修饰
三.使用好处
1. 自动生成构造函数
- 简化代码: 使用
@RequiredArgsConstructor
可以自动生成一个构造函数,包含所有被final
修饰的字段和带@NonNull
注解的字段,减少冗余代码,降低手动编写构造函数的工作量。2. 提高代码可读性
- 清晰表达意图: 通过注解,开发者可以一目了然地了解哪些字段是必需的,这有助于团队合作和代码维护。
3. 避免错误
- 减少人为错误: 由于自动生成构造函数,避免了在手动编写构造函数时可能出现的遗漏或错误,从而提高了代码的稳定性。
4. 支持依赖注入
- 简化依赖注入: 在使用框架(如 Spring)时,可以通过构造函数注入依赖,使用
@RequiredArgsConstructor
简化了这一过程,使得代码更清晰,更容易进行单元测试。
四.示例
@Slf4j @Component @RequiredArgsConstructor public class GeneralMessageDemoProduce { private final RocketMQTemplate rocketMQTemplate; /** * 发送普通消息 * * @param topic 消息发送主题,用于标识同一类业务逻辑的消息 * @param tag 消息的过滤标签,消费者可通过Tag对消息进行过滤,仅接收指定标签的消息。 * @param keys 消息索引键,可根据关键字精确查找某条消息 * @param messageSendEvent 普通消息发送事件,自定义对象,最终都会序列化为字符串 * @return 消息发送 RocketMQ 返回结果 */ public SendResult sendMessage(String topic, String tag, String keys, GeneralMessageEvent messageSendEvent) { SendResult sendResult; try { StringBuilder destinationBuilder = StrUtil.builder().append(topic); if (StrUtil.isNotBlank(tag)) { destinationBuilder.append(":").append(tag); } Message<?> message = MessageBuilder .withPayload(messageSendEvent) .setHeader(MessageConst.PROPERTY_KEYS, keys) .setHeader(MessageConst.PROPERTY_TAGS, tag) .build(); sendResult = rocketMQTemplate.syncSend( destinationBuilder.toString(), message, 2000L ); log.info("[普通消息] 消息发送结果:{},消息ID:{},消息Keys:{}", sendResult.getSendStatus(), sendResult.getMsgId(), keys); } catch (Throwable ex) { log.error("[普通消息] 消息发送失败,消息体:{}", JSON.toJSONString(messageSendEvent), ex); throw ex; } return sendResult; } }