为什么在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 分钟前
Unix domain socket 的四个边界:抽象地址没有权限,SO_PEERCRED 是快照
后端
小兔子6 分钟前
no-cache 不是「不缓存」:RFC 9111 里几句常被读反的话
后端
雷一言说6 分钟前
Spring AI 2.0 Tool Search:工具多了,只把相关的发给模型
spring
Vecter7 分钟前
于 Spring Boot 和 LangChain4j 的 Web 智能助手
后端
张一凡9311 分钟前
把“不要乱改”从提示词里拿出来,放进可校验的提案里
前端·后端·架构
一只爱撸猫的程序猿11 分钟前
当任何人都能生成一万行代码:什么变得稀缺
人工智能·后端·程序员
Potato_土豆16 分钟前
MCP Server 接入多个 AI 客户端:配置差异与 10 个真实踩坑
人工智能·后端·ai编程
SL_staff17 分钟前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈
低调滴开发17 分钟前
3 行代码写崩一个函数?切片才是 Rust 字符串处理的正确姿势
开发语言·后端·rust
代码丰22 分钟前
跨系统传输大 JSON:直接压缩,还是把数据放进 Redis?
redis·后端·json