为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入

byType找到多种实现类导致报错

@Autowired: 通过byType 方式进行装配, 找不到或是找到多个,都会抛出异常

我们在单元测试中无法进行字段注入

字段注入通常是 private 修饰的,Spring 容器通过反射为这些字段注入依赖。然而,在单元测试中,我们不能直接访问或赋值这些私有字段

所以为了在单元测试用也能注入我们的Bean对象,我们最好用构造注入

无法定义 final****字段

  • 字段注入的问题 : 使用字段注入时,字段必须是非 final 的,这违反了不可变性设计的最佳实践。

  • 构造函数注入的优势 : 构造函数注入允许将依赖声明为 final,确保依赖在对象构造后不可更改。

    @Component
    public class MyService {
    private final MyRepository myRepository;

    复制代码
      public MyService(MyRepository myRepository) {
          this.myRepository = myRepository;
      }

    }

Spring 的初始化顺序可能导致问题

  • 字段注入的问题 : 字段注入依赖于 Spring 的反射机制在对象实例化后注入依赖 。这可能导致在依赖注入完成之前尝试访问字段,从而引发 NullPointerException
  • 构造函数注入的优势: 构造函数注入在对象创建时就完成了所有依赖的初始化,避免了初始化顺序问题。
相关推荐
全栈小刘2 分钟前
ChatGPT账号打通OpenClaw?Codex又整了个“电子宠物”,开发者这下真坐不住了
后端
小龙报9 分钟前
【Coze-AI智能体平台】低代码省时高效:Coze 应用开发全流程指南
java·人工智能·python·深度学习·低代码·chatgpt·交互
陈随易14 分钟前
bun将会支持Bun.image,你怎么看?
前端·后端·程序员
念何架构之路23 分钟前
Go Web基础和Http演进
开发语言·后端·golang
勿忘初心122126 分钟前
【Java实战】SpringBoot 集成 freemarker 导出 Word 模板
java·spring boot·freemarker·模板引擎·word导出·后端实战
绿草在线31 分钟前
SpringBoot项目实战:从零搭建高效开发环境
java·spring boot·后端
J2虾虾33 分钟前
Java Lambda 表达式详解文档
java·开发语言
longxibo38 分钟前
【第1章 环境搭建与项目结构解析】
java·后端·流程图
a***728939 分钟前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
Java成神之路-44 分钟前
面试题:Spring AOP底层实现原理
java·spring aop