spring-boot - @AllArgsConstructor 和 Spring 的构造函数注入:需要私有 final 吗?
问题描述
假设我有以下构造函数注入(不是自动装配):
@Service
public class FooService {
private final OrderService orderService;
public FooService(OrderService orderService) {
this.orderService = orderService;
}
}
可以替换为:
@Service
@AllArgsConstructor
public class FooService {
private final OrderService orderService;
}
我是否需要将其声明为private
并final
注入此服务?龙目岛会像对待@Data
豆类一样处理这个问题吗?有什么副作用吗?
解决方案
您应该@RequiredArgsConstructor
改用,您需要一个主构造函数来填充必填字段。所以你标记了它们final
并使用这个注解来生成一个主构造函数。
@AllArgsConstructor
容易出错,因为它可能会产生 Spring 可能无法处理的多个构造函数。在您的特定情况下,@AllArgsConstructor
and的结果@RequiredArgsConstructor
恰好是相同的,因为您只有一个final
字段。
请注意,Spring 文档鼓励使用基于构造函数的注入(https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-setter-injection),并且建议避免同时使用多种注射技术。
@Service
@RequiredArgsConstructor
public class FooService {
private final OrderService orderService;
}
推荐阅读
- visual-studio-2019 - 我无法签署 bin\Debug\Mainpaint.exe
- ios - UICollectionView 的宽度在 UITableViewCell 内没有改变
- python - 使用 Python 和 Gmail API 将电子邮件标记为已读
- twitter-bootstrap - Bootstrap 3 虚线进度条
- python - 将“24OCT2020:00:00:00”格式转换为日期时间
- word-embedding - 如何在词嵌入模型 BERT 上使用我自己的语料库
- spring-boot - 如何检测 RSocket 连接是否成功?
- bash - 如果在一个命令行中有多个重定向运算符,它们是如何工作的?(重击)
- python - CVXPY 优化问题。DCPError:问题不遵循 DCP 规则
- python - 如何从终端运行特定的 Jupyter 单元号?