




















在 Spring Boot 开发中,强烈推荐使用第一种方式(构造器注入 + @RequiredArgsConstructor),而不是第二种(字段注入 + @Autowired)。这不仅是 Spring 官方的最佳实践,也是现代 Java 开发的主流共识。
@RestController
@RequiredArgsConstructor
public class PlatformUserTokenController {
private final PlatformUserTokenService platformUserTokenService;
private final PortalUserContext userContext;
private final McpPlatformUserTokenRepository mcpPlatformUserTokenRepository;
}
final 修饰的字段,在对象创建后不能被修改,保证了依赖的不可变性。new PlatformUserTokenController(mockService, mockContext, mockRepository);
ReflectionTestUtils 或 @MockBean,测试代码更复杂且不直观。BeanCreationException),而不是在运行时才出现 NullPointerException。null,导致运行时意外错误。BeanCurrentlyInCreationException),而字段注入则可能隐藏循环依赖,直到运行时才暴露,且解决起来更困难。@RequiredArgsConstructor 自动生成包含所有 final 字段的构造器,省去了手写构造器的繁琐,既简洁又保持了上述所有优势。@RestController
public class PlatformUserTokenController {
@Autowired
private PlatformUserTokenService platformUserTokenService;
// ...
}
ReflectionTestUtils 设置字段,导致测试变得笨重且与 Spring 耦合。NullPointerException,问题被延迟到运行时。推荐:始终使用构造器注入(方式一),配合 Lombok 的 @RequiredArgsConstructor 或手动编写构造器。这正是 Spring 官方在文档中强烈建议的方式(参见 Spring 官方文档 中关于“基于构造器的依赖注入”的推荐)。
例外场景:在极少数情况下(例如需要注入非必要依赖,或存在循环依赖的遗留代码),才考虑使用字段注入或 Setter 注入,但这属于临时妥协,应从设计层面重构。
总之,方式一是更现代、更健壮、更优雅的选择,理应成为团队编码规范中的标准实践。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。