当前位置: 首页 > news >正文

为什么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,且无法在编译时期发现。
  • 构造器注入因其在单元测试和不可变性方面的优势,被视为最佳实践。

相关文章:

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

背景 Spring是Java程序员常用的框架之一。官方从Spring 4.0开始不推荐使用Autowired进行字段注入。 Spring注入方式 基于构造器注入:在构造器上使用Autowired。 优点:可以声明字段为final,确保字段在构造时被初始化。 基于setter方法注入&…...

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十九章 Linux MISC驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…...

基于MobileNetv2的垃圾分类函数式自动微分-昇思25天打卡

基于MobileNetv2的垃圾分类 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入,对图像中的垃圾物体进行检测,并且将检测结果图片保存到文件中。 1、实验目的 了解熟悉垃圾分类应用代码的编写(Python语言)&a…...

STM32CubeIDE(CAN)

目录 一、概念 1、简述 2、CAN 的几种模式 二、实践 1、环回模式轮询通信 1.1 软件配置 1.2 代码编写 2、环回模式中断通信 2.1 软件配置 2.2 代码编写 一、概念 1、简述 STM32微控制器系列包含多个型号,其中一些型号集成了CAN(Controller Are…...

GO Channel使用详解(各种场景下的最佳实践)

GO Channel使用详解(各种场景下的最佳实践) 一个知识点:通过反射的方式执行 select 语句,在处理很多的 case clause,尤其是不定长的 case clause 的时候,非常有用。而且,在后面介绍任务编排的实现时,我也会采用这种方法,所以,我先带你具体学习下 Channel 的反射用法…...

SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战

概览 在 SwiftUI 的开发过程中我们常说:“屏幕不够,滚动来凑”。可见滚动视图对于超长内容的呈现有着多么秉轴持钧的重要作用。 这不,从 SwiftUI 5.0(iOS 17)开始苹果又为滚动视图增加了全新的功能。但是官方的示例可…...

picker 构建记录

picker 构建记录 tomlinuxtom:~/openverify/picker$ cd picker bash: cd: picker: 没有那个文件或目录 tomlinuxtom:~/openverify/picker$ export BUILD_XSPCOMM_SWIGpython tomlinuxtom:~/openverify/picker$ make rm -rf temp build /home/tom/Tools/verible-v0.0-3724/bin/…...

Docker部署kafka,Docker所在宿主机以外主机访问

# 安装启动zookeeper docker run -d --name zookeeper --publish 2181:2181 --volume /etc/localtime:/etc/localtime zookeeper:latest --network 指定的网络 -p:设置映射端口(默认2181) -d:后台启动 # 启动kafka docker run -d…...

控制欲过强的Linux小进程

控制欲强?视奸?普通人那才叫视奸,您是皇帝,天下大事无一逃过您的耳目,您想看什么就看什么,臣怀疑他在朋友圈私养兵士,囤积枪甲,蓄意谋反,图谋皇位啊! 哈哈哈哈开个玩笑&…...

​探讨元宇宙和VR虚拟现实之间的区别​

在数字时代,人们对虚拟现实的兴趣与日俱增。在虚拟现实技术的推动下,出现了两个概念:元宇宙和VR虚拟现实。虽然这两个概念都与虚拟现实有关,但它们有着不同的特点和用途。在本文中,我们将探讨元宇宙和VR虚拟现实之间的…...

Docker Desktop安装

0 Preface/Foreward 1 安装 1.1 运行docker安装包 安装完Docker Desktop后,运行Docker Desktop,出现WSL 2安装不完整情况,具体情况如下: 解决方法:旧版 WSL 的手动安装步骤 | Microsoft Learn 也可以直接下载新的安…...

《Towards Black-Box Membership Inference Attack for Diffusion Models》论文笔记

《Towards Black-Box Membership Inference Attack for Diffusion Models》 Abstract 识别艺术品是否用于训练扩散模型的挑战,重点是人工智能生成的艺术品中的成员推断攻击——copyright protection不需要访问内部模型组件的新型黑盒攻击方法展示了在评估 DALL-E …...

vscode调试nextjs前端后端程序、nextjs api接口

最近有一个项目使用了nextjs框架,并且使用nextjs同时实现了前后端,由于之前前后端都是分离的,前端的调试可以通过在代码种添加debugger或者直接在浏览器中打断点实现,现在想调试后端接口,前面的方式就不适用了。故研究…...

《SeTformer Is What You Need for Vision and Language》

会议:AAAI 年份:2024 论文:DDAE: Towards Deep Dynamic Vision BERT Pretraining - AMinerhttps://www.aminer.cn/pub/6602613613fb2c6cf6c387c2/ddae-towards-deep-dynamic-vision-bert-pretraining 摘要 这篇论文介绍了一种新型的变换器…...

[保姆级教程]uniapp安装使用uViewUI教程

文章目录 创建 UniApp 项目下载uView UI下载安装方式步骤 1: 安装 uView UI步骤 2: 查看uView UI是否下载成功步骤 3: 引入 uView 主 JS 库步骤 4: 引入 uView 的全局 SCSS 主题文件步骤 5: 引入 uView 基础样式步骤 6: 配置 easycom 组件模式注意事项 NPM方式步骤 1: 安装 uVi…...

网络安全法规对企业做等保有哪些具体规定?

网络安全法规对企业做等保的具体规定 根据《中华人民共和国网络安全法》,企业作为网络运营者,需要履行网络安全等级保护制度的相关义务,确保网络安全和数据保护。具体规定包括: 网络安全等级保护制度:企业应根据网络安…...

Java开发中超好用Orika属性映射工具

Orika属性映射工具 引入pom依赖 <dependency><groupId>ma.glasnost.orika</groupId><artifactId>orika-core</artifactId><version>1.5.4</version></dependency>上干货 封装的工具类:OriUtilsimport ma.glasnost.orika.Map…...

qt初入门8:下拉框,输入框模糊查询,提示简单了解 (借助QCompleter)

实现一个简单的模糊查询的逻辑&#xff0c;输入框能提示相关项。 主要借助qt的QCompleter 类&#xff08; Qt 框架中提供的一个用于自动补全和模糊搜索的类&#xff09;&#xff0c;结合一些控件&#xff0c;比如QComboBox和QLineEdit&#xff0c;实现模糊查询的功能。 1&…...

【qt】VS中如何配置Qt环境

https://download.qt.io/official_releases/vsaddin/ 首先需要下载一下vsaddin,上面的是下载的网站. 下载的时候可能会出现下图的情况 说明你下的vsaddin和您的VS版本不匹配,所以你可以多下几个其他版本的vsAddin,一般都是和你VS版本相匹配的才可以,如Vs2022,那就试试vsaddin2…...

对于相同网段的IP,部分无法ping通问题

现象1&#xff1a;在Linux上执行 ping 192.168.1.232&#xff0c;无法ping通 分析1&#xff1a;使用ifconfig查询&#xff0c;联网使用eth0口&#xff0c;只能上网192.168.10.xx网段&#xff0c;需要增加网段 解决方法&#xff1a;使用ip addr 查询&#xff0c;本身只具备10网…...

衡山派D21x平台SDMC驱动与文件系统参数配置详解

衡山派D21x平台SDMC驱动与文件系统参数配置详解 最近在衡山派D21x平台上做项目&#xff0c;要用到SD卡存储数据&#xff0c;发现很多朋友在配置SDMC驱动和挂载文件系统时容易卡住。今天我就把自己在实际项目中配置SD/MMC控制器&#xff08;SDMC&#xff09;的完整流程分享出来&…...

衡山派Luban-Lite系统LVGL示例程序配置与自定义APP开发实战

衡山派Luban-Lite系统LVGL示例程序配置与自定义APP开发实战 最近在用衡山派的开发板做项目&#xff0c;需要做一个带界面的产品。官方SDK里已经集成了LVGL这个强大的嵌入式图形库&#xff0c;还提供了几个现成的Demo。但很多朋友拿到手后&#xff0c;不知道该怎么配置这些Demo…...

如何解决Rhino到Blender的数据转换难题:import_3dm工具全解析

如何解决Rhino到Blender的数据转换难题&#xff1a;import_3dm工具全解析 【免费下载链接】import_3dm Blender importer script for Rhinoceros 3D files 项目地址: https://gitcode.com/gh_mirrors/im/import_3dm 3大核心突破彻底重塑3D工作流 为什么跨软件协作总是困…...

Phi-4-reasoning-vision-15B部署实操:双GPU显存分配策略与低并发稳定性验证

Phi-4-reasoning-vision-15B部署实操&#xff1a;双GPU显存分配策略与低并发稳定性验证 1. 引言 如果你手头有两张24GB显存的GPU&#xff0c;想部署一个能看懂图片、分析图表、甚至理解软件界面的AI模型&#xff0c;那么微软最新发布的Phi-4-reasoning-vision-15B绝对值得一试…...

Phi-3-mini-4k-instruct模型微调实战指南

Phi-3-mini-4k-instruct模型微调实战指南 1. 引言 你是不是遇到过这样的情况&#xff1a;用一个现成的AI模型来处理你的专业数据&#xff0c;结果发现它总是理解不了你的行业术语&#xff0c;或者给出的回答不够专业&#xff1f;这种情况太常见了。通用模型虽然强大&#xff…...

EasyAnimateV5-7b-zh-InP效果展示:生物细胞图→分裂过程+胞器运动动态化

EasyAnimateV5-7b-zh-InP效果展示&#xff1a;生物细胞图→分裂过程胞器运动动态化 1. 引言&#xff1a;当静态的细胞图“活”了过来 想象一下&#xff0c;你手头有一张精美的生物细胞结构图&#xff0c;它清晰地展示了细胞核、线粒体、内质网等细胞器。但这张图是静止的&…...

号称解放双手的 OpenClaw 为何成不了合格生产力工具?

&#x1f343; 予枫&#xff1a;个人主页&#x1f4da; 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》《Java 面试刷题指南》&#x1f4bb; Debug 这个世界&#xff0c;Return 更好的自己&#xff01; 引言 近期AI圈爆火的OpenClaw被捧为“AI打工人”&#xff0c;号称…...

Leetcode:单调栈系列

本人总结的单调栈大概有三类&#xff1a; 求右边第一个比该元素大&#xff08;小&#xff09;的元素求左边第一个比该元素大&#xff08;小&#xff09;的元素求两边比该元素大&#xff08;小&#xff09;的元素 前两类一般是中等难度的题&#xff0c;完成一次单调栈即可&…...

为什么我的电脑不能升级Windows 11?终极兼容性检测工具深度解析

为什么我的电脑不能升级Windows 11&#xff1f;终极兼容性检测工具深度解析 【免费下载链接】WhyNotWin11 Detection Script to help identify why your PC is not Windows 11 Release Ready. Now Supporting Update Checks! 项目地址: https://gitcode.com/gh_mirrors/wh/Wh…...

终极指南:rustfmt vs cargo fmt - 何时使用哪个工具?

终极指南&#xff1a;rustfmt vs cargo fmt - 何时使用哪个工具&#xff1f; 【免费下载链接】rustfmt Format Rust code 项目地址: https://gitcode.com/GitHub_Trending/ru/rustfmt rustfmt 是 Rust 生态系统中官方的代码格式化工具&#xff0c;而 cargo fmt 则是与之…...