为什么在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
  • 构造函数注入的优势: 构造函数注入在对象创建时就完成了所有依赖的初始化,避免了初始化顺序问题。
相关推荐
落魄大学生之流水线上谋生计1 小时前
Java锁全面指南:从基础概念到企业级应用
java·开发语言
why技术1 小时前
eli5,我觉得这个全网在吹的技能,使用体验真的很一般啊。
前端·人工智能·后端
学习星球1 小时前
Qwik 框架入门实战:从开源项目 Qwik City 开始,用可恢复性替代水合
后端·前端框架·开源·c5全栈
剑胆琴心静水深流2 小时前
全栈之路6---web集成与呈现
前端·vue.js·spring boot·分布式·spring·前端框架·npm
爱学习的小白柏2 小时前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
码匠许师傅2 小时前
【C++ 面试真题】30. 聊聊 C++ 的互斥锁与读写锁
java·c++·面试
沙盘客3 小时前
AFSIM 示例解读(03)· 六自由度飞行仿真 six_dof(下):机场运作与弹道导弹投送
java·javascript·经验分享
CHANCE V3 小时前
集合排序和流排序
java
IT_陈寒3 小时前
被Java的final坑惨了,这些细节你可能也忽略了
前端·人工智能·后端
16月6日-晴4 小时前
Java面向对象进阶—多态
java·开发语言