为什么Spring不推荐@Autowired用于字段注入

背景

  • Spring是Java程序员常用的框架之一。
  • 官方从Spring 4.0开始不推荐使用@Autowired进行字段注入。

Spring注入方式

  1. 基于构造器注入:在构造器上使用@Autowired。

    • 优点:可以声明字段为final,确保字段在构造时被初始化。
  2. 基于setter方法注入:在setter方法上使用@Autowired。

    • 优点:在无参数构造器或工厂方法实例化Bean时,Spring会调用setter方法注入依赖。
  3. 基于字段注入:在字段上使用@Autowired。

    • 优点:最简洁,无需getter和setter代码,无需声明构造函数。

基于字段注入的缺点

  1. 容易引发NPE:Spring不会对依赖的bean是否为null进行判断,可能导致运行时的空指针异常。
  2. 缓解单一职责原则的违反:字段注入隐藏了依赖关系,可能导致代码质量降低。

Spring官方推荐

  • 推荐使用基于构造器注入的方式。

循环依赖问题

  • 构造器注入可能存在循环依赖问题。
  • 解决方案:
    1. 重构代码:消除循环依赖,可能成本较高。
    2. 使用@Lazy注解:延迟初始化bean,解决循环依赖。

总结

  • Spring提供三种注入方式:字段注入、setter方法注入、构造器注入。
  • 官方不推荐使用@Autowired进行字段注入,主要原因是容易引发NPE,且无法在编译时期发现。
  • 构造器注入因其在单元测试和不可变性方面的优势,被视为最佳实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python机器学习】朴素贝叶斯——条件概率

条件概率 假设现在有一个装了7块石头的罐子(3块灰色,4块黑色),如果从中随机取出一块,灰色的可能性就是3/7,黑色的可能性是4/7。我们使用p(gray)来表示取到灰色石头的概率,其概率值可以通过灰色…

【SpringBoot】参数传递之RequestBody接收JSON数据

4.3.3 RequestBody接收Json数据 PostMapping(path "/save2") public String save2(RequestBody Student student){ String firstName student.getFirstName; String lastName student.getLastName; return firstName"" "lastName; }

1.3 双向链表定义及部分实现

1.定义 单链表的问题:找后继容易, 找前驱难 双向链表( Double Linked List ) :指的是构成链表的每个结点中设立两个指针域: 一个指向其直接前趋的指针域 prior ,一个指向其直接后继的指针域 …

Tent混沌人工蜂群与粒子群混合算法遇到问题,具体问题及解决方案如文。

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

谷歌再被OpenAI截胡?训练数学AI拿下IMO银牌,不及SearchGPT放了空响..

昨夜谷歌振臂高呼:我们新的数学AI,能在IMO数学竞赛达到银牌水平! 但就在谷歌发文的几个小时后,OpenAI就偷了谷歌的家: 发布新的搜索方式SearchGPT ,剑指挑战谷歌的搜索引擎。 谷歌双模型并用攻克数学难题…

2. 卷积神经网络无法绕开的神——LeNet

卷积神经网络无法绕开的大神——LeNet 1. 基本架构2. LeNet 53. LeNet 5 代码 1. 基本架构 特征抽取模块可学习的分类器模块 2. LeNet 5 LeNet 5: 5 表示的是5个核心层,2个卷积层,3个全连接层.核心权重层:卷积层、全连接层、循环层&#xff…

LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

LCD 横屏切换为竖屏 横屏显示如何切换为竖屏显示 LCD 屏默认横屏显示 开发板配套的 LCD 屏默认都是横屏显示,如 4.3 寸、7 寸和 10.1 寸的不同分辨率的 RGB LCD 屏 固定坐标体系 (以 800*480 分辨率为例)横屏模式下的固定坐标:…

快醒醒,别睡了!...讲《数据分析pandas库》了—/—<5>

一、 1、修改替换变量值 本质上是如何直接指定单元格的问题,只要能准确定位单元地址,就能够做到准确替换。 1.1 对应数值的替换 具体用法如下: replace方法: df.replace(to_replace None :将被替换的原数值,所有…

【Python机器学习】决策树的构造——信息增益

决策树是最经常使用的数据挖掘算法。它之所以如此流行,一个很重要的原因就是不需要了解机器学习的知识,就能搞明白决策树是如何工作的。 决策树的优缺点: 优点:计算复杂度不高,输出结果易于理解,对中间值的…

linux集群架构--高可用--keepalived(13985字详解)

linux架构高可用 a.概述 高可用:HA HighAvailablity —>Keepalived生成VIP,DNS解析到这个IP地址即可 b.原理 keepalived 是基于VRRP协议实现高可用VRRP虚拟路由器冗余协议,最开始是给网络设备实现高可用,目前keepalive实现v…

项目实战1(30小时精通C++和外挂实战)

项目实战1(30小时精通C和外挂实战) 01-MFC1-图标02-MFC2-按钮、调试、打开网页05-MFC5-checkbox及按钮绑定对象06--文件格式、OD序列号08-暴力破解09-CE10-秒杀僵尸 01-MFC1-图标 这个外挂只针对植物大战僵尸游戏 开发这个外挂,首先要将界面…

GUL图形化界面操作(下部)

目录 ​编辑 前言 Swing 窗口 注意点 新增的组件 进度条组件 开关按钮 多面板和分割面板 多面板 分割面板 ​编辑 选项窗口 对话框带三个选项是,否,取消。 对话框提示输入文本: 前言 修炼中,该篇文章为俺很久前的学习笔记 Swi…

2024钉钉杯A题思路详解

文章目录 一、问题一1.1 问题1.2 模型1.3 目标1.4 思路1.4.1 样本探究1.4.2 数据集特性探究:1.4.3 数据预处理1.4.4 数据趋势可视化1.4.5 ARIMA和LSTM两种预测模型1.4.6 参数调整 二、问题二2.1 问题2.2 模型2.3 目标2.4 思路2.4.1 样本探究2.4.2 数据集特性探究2.4…

C语言系统调用linux文件系统

在C语言中,open、write和read函数是系统调用(system calls),它们直接由操作系统提供,用于底层的文件操作。这些函数是UNIX和类UNIX系统(如Linux)中的标准接口,不同于C标准库中的文件…

Radon(拉当) 变换:超详细讲解(附MATLAB,Python 代码)

Radon 变换 Radon 变换是数学上用于函数或图像的一种积分变换,广泛应用于图像处理领域,尤其是在计算机断层成像 (CT) 中。本文档将详细介绍 Radon 变换的数学含义及其在图像处理中的应用。 数学定义 Radon 变换的数学定义是将二维函数 f ( x , y ) f…

SRTOD

文章目录 AbstractMethodoverviewinnovationsolve Experiment link Abstract 本文主要探讨了在目标检测领域中,如何解决微小物体检测的问题。传统的通用检测器在处理微小物体时性能下降严重,主要是因为难以提取有效的特征。为了解决这个问题&#xff0c…

SLAM面试题

常见的slam面试问题如下,在文章末尾有《自动驾驶100问》的视频内容,可以去看看: 1.重定位和回环检测的区别是什么? 2.单应矩阵H和基础矩阵F的区别是什么? 3.视觉SLAM方法的分类和对应的特点分析。 4.关键帧的作用是…

STL-string(使用和部分模拟实现)

1.string basic_string<char> 是 C 标准库中定义的一个模板类型,用于表示一个字符串。这个模板类接收一个字符类型作为模板参数。typedef basic_string<char> string&#xff1a;string类是basic_string类模板的实例化&#xff0c;它使用 char作为其字符类型。 2.…

狗都能看懂的Actor-Critic强化学习算法讲解

Review Policy Gradient 上面的公式是Policy Gradient的更新函数&#xff0c;这个式子是指在 s t s_t st​时刻采取了 a t a_t at​&#xff0c;计算出对应发生的概率 p θ p_\theta pθ​&#xff0c;然后计算在采取了这个 a t a_t at​之后&#xff0c;所得到的reward有多大。…

分布式智能:Mojo模型在分布式系统中的动态使用策略

分布式智能&#xff1a;Mojo模型在分布式系统中的动态使用策略 在当今的大数据时代&#xff0c;机器学习模型经常需要在分布式系统中运行&#xff0c;以处理大规模数据集并提高计算效率。Mojo模型&#xff0c;作为一个泛指&#xff0c;可以代表任何机器学习或深度学习模型。实…