为什么在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
  • 构造函数注入的优势: 构造函数注入在对象创建时就完成了所有依赖的初始化,避免了初始化顺序问题。
相关推荐
是萝卜干呀6 分钟前
IIS 部署 asp.net core 项目时,出现500.19、500.31问题的解决方案
后端·iis·asp.net·hosting bundle
从零开始学习人工智能7 分钟前
SpringBoot + Apache Tika:一站式解决文件数据提取难题
spring boot·后端·apache
往事随风去8 分钟前
Java 中的 Consumer 与 Supplier 接口
java·面试·响应式编程
北城以北888816 分钟前
Java高级编程--XML
xml·java·开发语言·intellij-idea
IT_陈寒20 分钟前
Python 3.12 的这5个新特性,让我的代码性能提升了40%!
前端·人工智能·后端
华仔啊21 分钟前
别再被 Stream.toMap() 劝退了!3 个真实避坑案例,建议收藏
javascript·后端
夕颜11131 分钟前
让 Cursor 教我写插件
后端
SXJR32 分钟前
Java mp4parser 实现视频mp4 切割
java·python·音视频
冬天vs不冷38 分钟前
Java基础(十一):关键字final详解
java·开发语言
郭京京39 分钟前
goweb内置的响应2
后端·go