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

新版IDEA提示@Autowired不建议字段注入

       随着项目的复杂度的增加,我们通常会在一个业务类中注入其他过多的业务类。从而使当前的业务层扩充成一个大而全的功能模块。那么就容易出现一下问题

  • 字段注入会让依赖关系变得不那么明显,因为你无法通过构造函数看到所有的依赖项。使用构造函数时,所有必需的组件都会在方法签名中列出,使得依赖关系更加清晰。
  • 如果 @Autowired 注解的字段没有注入成功,且后续使用时没有进行空值检查,可能会导致空指针异常(NullPointerException)。构造函数注入可以确保所有必须依赖项在对象构造时被提供,当未能注入时,构造过程将失败并抛出异常。
  • 使用字段注入可能导致循环依赖问题,尤其是在两个或多个 beans 互相依赖时。Spring 容器可以通过 setter 注入来解决循环依赖,但构造函数注入则不可以。
  • 字段注入会隐藏依赖的生命周期管理特性。当需要进行作用域(如单例、原型等)的特定管理时,构造函数注入更直观,且不容易出现意外的作用域问题。

       尽管字段注入是一种简单的方法,可以快速快速获得依赖,但它并不是最佳实践。为了确保代码的可维护性、可测试性和清晰性,推荐使用构造函数注入和方法注入。通过这种方式,你可以明确依赖关系,避免潜在的问题,并提升代码的质量和可读性。

      使用字段注入

@Slf4j
@Service
@Transactional
public class StockService {@Autowiredprivate MaterialService materialService;@Autowiredprivate StorageLocationService storageLocationService;@Autowiredprivate StorageStockService storageStockService;@Autowiredprivate StorageStockMovementsService storageStockMovementsService;@Autowiredprivate StorageInboundService storageInboundService;@Autowiredprivate StorageInboundMaterialService storageInboundMaterialService;
}

    (StockService 是专门的服务组合,将多个业务服务提取到一个类中,管理它们的交互。避免违反了单一职责原则)       

       使用构造器(推荐)

@Slf4j
@Service
@Transactional
public class StockService {private final MaterialService materialService;private final StorageLocationService storageLocationService;private final StorageStockService storageStockService;private final StorageStockMovementsService storageStockMovementsService;private final StorageInboundService storageInboundService;private final StorageInboundMaterialService storageInboundMaterialService;public StockService(MaterialService materialService, StorageLocationService storageLocationService, StorageStockService storageStockService, StorageStockMovementsService storageStockMovementsService, StorageInboundService storageInboundService, StorageInboundMaterialService storageInboundMaterialService) {this.materialService = materialService;this.storageLocationService = storageLocationService;this.storageStockService = storageStockService;this.storageStockMovementsService = storageStockMovementsService;this.storageInboundService = storageInboundService;this.storageInboundMaterialService = storageInboundMaterialService;}
}

        有助于提高类的可测试性。如果项目使用了 Lombok,可以考虑使用 @Autowired 和 @AllArgsConstructor 来减少样板代码。

@Slf4j
@Service
@Transactional
@AllArgsConstructor(onConstructor = @__(@Autowired))
public class StockService {private final MaterialService materialService;private final StorageLocationService storageLocationService;private final StorageStockService storageStockService;private final StorageStockMovementsService storageStockMovementsService;private final StorageInboundService storageInboundService;private final StorageInboundMaterialService storageInboundMaterialService;
}

相关文章:

新版IDEA提示@Autowired不建议字段注入

随着项目的复杂度的增加,我们通常会在一个业务类中注入其他过多的业务类。从而使当前的业务层扩充成一个大而全的功能模块。那么就容易出现一下问题 字段注入会让依赖关系变得不那么明显,因为你无法通过构造函数看到所有的依赖项。使用构造函数时&#…...

adb的安装和使用 以及安装Frida 16.0.10+雷电模拟器

.NET兼职社区 .NET兼职社区 .NET兼职社区 1.下载adb Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip 2.配置adb环境变量 按键windowsr打开运行,输入sysdm.cpl,回车。 高级》环境变量》系统变量》…...

解决移动端1px 边框优化的8个方法

前言 您是否注意到 1px 边框在移动设备上有时会显得比预期的要粗?这种不一致源于移动屏幕的像素密度不同。 在 Web 开发中,我们使用 CSS 来设置页面样式。但是,CSS 中的 1px 并不总是转换为设备上的物理 1px。这种差异就是我们的“1px 边框…...

频带宽度固定,如何突破数据速率的瓶颈?

目录 目录 引言 信道 频带宽度 信噪比 信噪比的重要性 影响信噪比的因素 码元 码元的特点: 码元与比特的关系: 码元的作用: 码元的类型: Question 类比解释: 技术解释: 引言 在现代通信系统中…...

Linux网络编程 --- 高级IO

前言 IO Input&&Output read && write 1、在应用层read && write的时候,本质把数据从用户层写给OS --- 本质就是拷贝函数 2、IO 等待 拷贝。 等的是:要进行拷贝,必须先判断读写事件成立。读写事件缓冲区空间满…...

Python中给定一个数组a = [2,3,9,1,0],找出其中最大的一个数,并打印出来 求解?

Python有内置的max函数可以取最大值: max([2,3,9,1,0])也可以使用sorted先排序,再索引取出最大值: sorted([2,3,9,1,0])[-1]如果不用内置函数,自己排序算法来找出最大值,也有很多选择。 比如冒泡排序、循环排序、交…...

系统优化工具 | PC Cleaner v9.7.0.3 绿色版

PC Cleaner是一款功能强大的电脑清理和优化工具,旨在通过清理系统垃圾文件、解除恶意软件和优化系统性能来提高计算机的运行效率。该软件提供了多种功能,可以帮助用户维护和提升计算机的整体表现。 PC Cleaner 支持 Windows 7 及以上操作系统&#xff0…...

JavaSE、JavaEE 与 JavaWeb 的详解与区别

一、JavaSE(Java Standard Edition)——标准版 1. 什么是JavaSE JavaSE,全称Java Standard Edition,译为Java标准版,是Java平台的基础,也是开发者最常使用的Java版本。JavaSE包含了编程中最基础的核心库,如Java的基本语法、面向对象编程、集合框架、多线程、网络编程、…...

HCIE和CCIE,哪个含金量更高点?

在现在内卷的大环境下,技术岗可谓人人自危,也因此各种认证的重视程度直线升高。 特别是华为认证的HCIE和思科认证的CCIE,它们都代表着网络技术领域的顶尖水平。 但面对这两个高含金量的认证,不得不让人问出这个问题:同…...

2024.9.14 Python与图像处理新国大EE5731课程大作业,马尔可夫随机场和二值图割,校正立体图像的深度

1.马尔科夫随机场和二值图割 马尔可夫随机场(MRF, Markov Random Field): MRF 是一种用来描述图像像素之间空间关系的概率模型。它假设图像中的像素不仅取决于自身的值,还与周围像素有关。这种模型经常用于图像分割、去噪等任务。…...

工业大模型市场图谱:53个工业大模型全面梳理

工业场景要求严谨、容错率低,核心业务场景对模型准确率的要求达到95%以上、对幻觉的容忍率为0,因此通用基础大模型的工业知识往往不足以满足工业场景的应用需求。 根据沙丘智库发布的《2024年中国工业大模型应用跟踪报告》,工业大模型是指在…...

【代码随想录训练营第42期 Day58打卡 - 图论Part8 - 拓扑排序

目录 一、拓扑排序介绍 定义 特点 实现方法(2种) 应用 二、题目与题解 题目:卡码网 117. 软件构建 题目链接 题解:拓扑排序 - Kahn算法(BFS) 三、小结 一、拓扑排序介绍 对于拓扑排序&#xff0c…...

JVM内部结构解析

Java虚拟机(JVM)是Java程序运行的基础环境,它为Java程序提供了一个与平台无关的执行环境。了解JVM的内部结构对于Java开发者来说至关重要,因为它可以帮助开发者优化程序性能,理解垃圾回收机制,以及诊断和解…...

誉龙视音频综合管理平台 RelMedia/FindById SQL注入漏洞复现

0x01 产品简介 誉龙视音频综合管理平台是深圳誉龙数字技术有限公司基于多年的技术沉淀和项目经验,自主研发的集视音频记录、传输、管理于一体的综合解决方案。该平台支持国产化操作系统和Windows操作系统,能够接入多种类型的记录仪,实现高清实时图传、双向语音对讲、AI应用…...

MATLAB系列01:MATLAB介绍

MATLAB系列01:MATLAB介绍 1. MATLAB介绍1.1 MATLAB的优点1.2 MATLAB的缺点1.3 MATLAB的开发环境1.3.1 获取帮助的方法:1.3.2 一些重要的命令:1.3.3 MATLAB搜索路径 1. MATLAB介绍 MATLAB(矩阵实验室的简称)是一种专业的计算机程序&#xff0…...

GEE 按范围导出 Sentinel-2 卫星影像

Sentinel-2 卫星提供了高分辨率的地表覆盖图像,广泛应用于农业监测、城市规划、环境变化分析等诸多领域。在 Google Earth Engine (GEE) 中,我们能够按特定地理范围导出这些影像,以支持更深入的研究和分析。 使用方法 💻 GEE 提供…...

队列OJ题——用队列实现栈

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 用队列实现栈 二、解题思路 三、解题代码 class MyStack {public Queue<Integer> queue1;public Queue<Integer> queue2;public int usedSize;public MyStack() {queue1 new LinkedList<>()…...

RK3588镜像打包制作,替换文件系统

1.在开发板上安装async apt-get async 2.在另一台linux机器上执行命令拷贝文件系统 注意&#xff1a; 这里使用root权限或者账户 mkdir rootfs rsync -avx root192.168.1.3:/ rootfs 3.制作空镜像文件 先去开发板上验证自己的系统使用了多少空间&#xff0c;然后输入命令制…...

Open-Sora代码详细解读(2):时空3D VAE

Diffusion Models视频生成 前言&#xff1a;目前开源的DiT视频生成模型不是很多&#xff0c;Open-Sora是开发者生态最好的一个&#xff0c;涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发&#xff0c;深…...

基于微信平台的旅游出行必备商城小程序+ssm(lw+演示+源码+运行)

摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…...

proxy-doctor:自动化诊断与修复开发工具代理配置的利器

1. 项目概述与核心价值最近在折腾一些需要稳定网络连接的项目时&#xff0c;遇到了一个老生常谈但又极其恼人的问题&#xff1a;代理配置。无论是开发环境里的包管理工具&#xff0c;还是日常使用的命令行工具&#xff0c;一旦涉及到网络请求&#xff0c;代理设置不对&#xff…...

Speechless:三步完成微博PDF备份的终极免费Chrome扩展

Speechless&#xff1a;三步完成微博PDF备份的终极免费Chrome扩展 【免费下载链接】Speechless 把新浪微博的内容&#xff0c;导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在数字时代&#xff0c;我们的社交…...

InsForge:基于Python的Instagram内容自动化创作与发布工具全解析

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫InsForge。这名字听起来有点“工业锻造”的味道&#xff0c;实际上&#xff0c;它是一个专注于Instagram内容创作与自动化的工具集。简单来说&#xff0c;它试图帮你解决在Instagram上创作、发布、管理内容…...

终极CoreCycler教程:简单三步完成CPU稳定性测试与优化

终极CoreCycler教程&#xff1a;简单三步完成CPU稳定性测试与优化 【免费下载链接】corecycler Script to test single core stability, e.g. for PBO & Curve Optimizer on AMD Ryzen or overclocking/undervolting on Intel processors 项目地址: https://gitcode.com/…...

终极解密指南:Windows平台NCM音频文件一键转换实战

终极解密指南&#xff1a;Windows平台NCM音频文件一键转换实战 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾因网易云音乐的NCM加密格式而烦恼&…...

FPGA高速ADC数据采集实战——基于AD9253 LVDS接口与ISERDESE2设计

1. AD9253高速ADC核心特性解析 AD9253这颗14位125MSPS四通道ADC芯片&#xff0c;在通信和医疗成像领域堪称经典。我经手过的多个雷达项目中&#xff0c;它的信噪比表现总能带来惊喜——75.3dBFS的实测数据比手册标称值还要稳定。但真正让工程师们又爱又恨的&#xff0c;是它那个…...

Windows驱动清理终极指南:用DriverStore Explorer安全释放数十GB磁盘空间

Windows驱动清理终极指南&#xff1a;用DriverStore Explorer安全释放数十GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你的Windows电脑是否经常提示C盘空间不足&#xff…...

Kubernetes配置管理实战:基于Kustomize的结构化部署与多环境管理

1. 项目概述&#xff1a;一个被低估的Kubernetes配置管理利器如果你和我一样&#xff0c;长期在Kubernetes生态里摸爬滚打&#xff0c;那你一定经历过这样的场景&#xff1a;为了部署一个稍微复杂点的应用&#xff0c;需要维护一堆YAML文件——Deployment、Service、ConfigMap、…...

移动端AI助手开发实战:混合架构、模型部署与性能优化

1. 项目概述&#xff1a;一个移动端AI助手的诞生 最近在移动端AI应用开发圈子里&#xff0c;一个名为 copaw-mobile 的项目开始引起不少同行的注意。这个由 xmingai 团队开源的项目&#xff0c;定位非常清晰——它要做的&#xff0c;就是将一个功能强大的AI助手&#xff0c…...

数据中心碳减排:工作负载迁移与服务器调度优化

1. 数据中心碳减排技术概述 在数字经济时代&#xff0c;数据中心作为信息基础设施的核心载体&#xff0c;其能源消耗和碳排放问题日益凸显。据统计&#xff0c;全球数据中心电力消耗已占全球总用电量的1-2%&#xff0c;且随着AI、云计算等技术的快速发展&#xff0c;这一比例仍…...