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

embedded/2025/2/7 9:43:25/

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
  • 构造函数注入的优势: 构造函数注入在对象创建时就完成了所有依赖的初始化,避免了初始化顺序问题。

http://www.ppmy.cn/embedded/160258.html

相关文章

【Go语言圣经】第七节:接口

第七章:接口 Golang 当中接口类型的独特之处在于它是满足隐式实现的。即:没必要对于给定的具体类型定义所有满足的接口类型,简单地拥有一些必要的方法即可。这种设计使得我们可以创建一个新的接口类型来满足已经存在的具体类型,却…

LabVIEW如何有效地进行数据采集?

数据采集(DAQ)是许多工程项目中的核心环节,无论是测试、监控还是控制系统,准确、高效的数据采集都是至关重要的。LabVIEW作为一个图形化编程环境,提供了丰富的功能来实现数据采集,确保数据的实时性与可靠性…

python-leetcode-除法求值

399. 除法求值 - 力扣(LeetCode) from collections import defaultdict from typing import Listclass Solution:def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]:# 构建加权图g…

4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)

文章目录 前言一、Ajax技术(从服务端获取数据,发送各种请求)0 接口文档管理:使用apipost等接口测试软件创建接口便于前端后端分离测试1 基本概念2 原生Ajax使用示例(几年前的早期用法) 二、 Axios技术(对原…

python开发:爬虫示例——GET和POST请求处理

一、Get请求 import json import requests#输入示例:urlhttps://www.baidu.com #RequestHeader:F12标头-请求标头-原始-复制到这(忽略第一句) def GetRequest(url,RequestHeader""):try:dic{}RequestHeaderList RequestHeader.s…

中国通信企业协会 通信网络安全服务能力评定 风险评估二级要求准则

通信网络安全服务能力评定要求是对通信网络安全服务单位的资格状况、经济实力、技术能力、服务队伍、服务过程能力等方面的具体衡量和评价。中国通信企业协会通信网络安全服务能力评定风险评估二级应达到风险评估服务一级能力要求的所有条款,并在以下方面增强或增加…

虚拟机搭建---K8S环境

K8S:docker容器其实本质上是一个linux里面的一个进程,容器本身自己是没有可再生能力的,没有高可用,而且生产环境运行容器,不可能只运行一两个,因此为了更加方便的管理众多容器,以及让容器具备高…