为什么在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 分钟前
[从0开始学Java|第十一天]学生管理系统
java·开发语言
看世界的小gui2 分钟前
Jeecgboot通过Maxkey实现单点登录完整方案
java·spring boot·jeecgboot
Arvin6273 分钟前
IntelliJ IDEA:无法读取**.properties
java·intellij-idea
10km8 分钟前
Spring Boot 环境下使用 Map<String, MultipartFile> 实现文件上传功能
java·spring boot·mock·map·multipartfile
yangminlei25 分钟前
使用 Cursor 快速创建一个springboot项目
spring boot·ai编程
学到头秃的suhian30 分钟前
Java的锁机制
java
Amarantine、沐风倩✨41 分钟前
一次线上性能事故的处理复盘:从 SQL 到扩容的工程化思路
java·数据库·sql·oracle
tb_first42 分钟前
万字超详细苍穹外卖学习笔记1
java·jvm·spring boot·笔记·学习·tomcat·mybatis
代码匠心1 小时前
从零开始学Flink:状态管理与容错机制
java·大数据·后端·flink·大数据处理
分享牛1 小时前
LangChain4j从入门到精通-11-结构化输出
后端·python·flask