You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lombok构造注解省略@Autowired的相关Spring注入疑问

Spring构造器注入与Lombok注解的问题解答

一、可省略@Autowired的Lombok构造注解

根据Spring 4.3+的规则:当Bean仅存在一个构造器时,该构造器上的@Autowired可以省略。对应的Lombok注解是:

  • @AllArgsConstructor:生成包含所有类字段的构造器,只要你的Bean没有其他构造器(手动编写或其他Lombok注解生成),就能省略@Autowired实现构造器注入
  • @RequiredArgsConstructor:生成包含所有final或@NonNull修饰字段的构造器,同样,当Bean只有这个构造器时,无需@Autowired即可完成构造器注入

@NoArgsConstructor仅生成无参构造器,单独使用它无法实现构造器注入(没有参数接收依赖),因此不满足省略@Autowired的前提。

二、仅使用@NoArgsConstructor是否足够?

完全不够。@NoArgsConstructor只会生成无参构造器,而构造器注入依赖于带参数的构造器来接收Spring容器中的Bean。如果只加这个注解,Spring无法通过构造器注入依赖,要么改用字段注入/Setter注入,要么补充带参数的构造器注解。

三、同时使用@NoArgsConstructor和@AllArgsConstructor是否属于“多个构造器”?

是的,这两个注解会为Bean生成无参构造器和全参构造器两个构造器,属于Spring规则中“存在多个构造器”的情况。

按照Spring官方要求,此时必须为其中一个构造器添加@Autowired,否则Spring容器无法确定使用哪个构造器创建Bean,会抛出初始化异常。至于讲师这么用的原因,可能是:

  • 讲师手动给目标构造器添加了@Autowired但未明确说明
  • 项目中存在其他配置让Spring识别出要使用的构造器
  • 该Bean本身没有需要注入的依赖,无参构造器即可满足需求(但这种情况谈不上构造器注入)

四、同时使用@NoArgs、@AllArgs、@ReqArgs时的注入情况

这三个注解会生成三个构造器:无参、全参、包含必填字段的构造器。此时Spring容器识别到多个构造器,必须给你用来注入依赖的那个构造器添加@Autowired,否则会导致Bean创建失败。

判断注入是否正常的方法:

  • 启动项目,查看是否出现构造器相关的初始化异常(如NoUniqueBeanDefinitionException)
  • 在构造器中添加日志打印,观察Spring实际调用的是哪个构造器
  • 在依赖字段上打断点,检查是否被正确赋值

内容的提问来源于stack exchange,提问作者kakoker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:35:24