Spring依赖注入的三种方式

article/2025/9/14 12:59:36

目录

一、变量注入(Field Injection)

二、构造器注入(Constructor Injection)

三、setter方法注入 (Setter Injection)

四、使用场景


Spring的依赖注入,我们一般使用@Autowired注解来完成,关于依赖注入一般有三种方式:

变量注入、构造器注入、setter方法注入,下面我们仔细分析一下三种注入方式各自的特点以及使用场景。

一、变量注入(Field Injection)

先看看怎么使用:

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;//...}

使用IDEA开发的时候,我们发现直接在变量上注解 @Autowired,它会有个警告提示:Field injection is not recommended。如下图:

image.png

具体是:Field injection is not recommended

Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies"。

意思是说“变量依赖注入是不被建议的方式”。Spring官方建议“总是采用构造器注入的方式建立依赖注入”。

优点:

  • 注入方式简单,非常简洁,没有任何多余代码;

弊端:

  • 注入对象不能用final修饰;
  • 可能会导致循环依赖,启动的时候不会报错,在使用那个bean的时候才会报错;
  • 对于IOC容器以外的环境,除了使用反射来提供它需要的依赖之外,无法复用该实现类。而且将一直是个潜在的隐患,因为你不调用将一直无法发现NullPointException的存在

二、构造器注入(Constructor Injection)

先看看怎么使用:

@Service
public class UserServiceImpl implements UserService {private final UserMapper userMapper;@Autowiredpublic UserServiceImpl(UserMapper userMapper) {this.userMapper = userMapper;}}

优点:

  • 显式注明必须强制注入,通过强制指明依赖注入来保证这个类的运行,防止NullPointerException;
  • 注入对象可以使用final修饰;
  • 非IOC容器环境也可使用new实例化该类的对象;
  • 避免循环依赖,如果存在循环依赖,spring项目启动的时候就会报错;

弊端:

  • 当你有十几个甚至更多对象需要注入时,构造函数的代码臃肿,看起来不太舒服;

使用 IEDA 可以在修改变量后重新使用快捷键生成构造方法。

三、setter方法注入 (Setter Injection)

先看看怎么使用:

@Service
public class UserServiceImpl implements UserService {private UserMapper userMapper;@Autowiredpublic void setUserMapper(UserMapper userMapper) {this.userMapper = userMapper;}}

优点:

  • 依赖注入中使用的依赖是可选的,选择依赖的意思是注入的依赖是可以为 NULL;
  • 允许在类构造完成后重新注入;

弊端:

  • 注入对象不能使用final修饰;

四、使用场景

  • 如果注入的属性是必选的属性,则通过构造器注入;
  • 如果注入的属性是可选的属性,则通过setter方法注入;
  • 至于field注入,不建议使用;

http://chatgpt.dhexx.cn/article/CLy8o6HY.shtml

相关文章

依赖注入的三种方式

DI(依赖注入) 注入的三种方法:构造器方法注入,set注入,基于注解的注入(接口注入) 1:构造器方法注入 创建一个Address类; public class Address {private String address;public Address() {}pu…

Pubmedy的使用教程

使用方法如下: 使用前先配置Sci-Hub的地址,如果网址不失效,配置一次即可 选中文章的DOI,右击选择Sci-Hub Search即可自动跳转到文章对应的Sci-Hub界面

Pubmedy加载时显示程序包无效的解决方案

目前谷歌应用商城已经下架Pubmedy,本地安装又遇到程序包无效:“CRX_HEADER_INVALID”。 解决方案: 将PubMedy.crx重命名为PubMedy.rar或者PubMedy.zip解压到要安装的位置找到扩展程序选项,并启用开发者选项选择加载已解压的扩展程…

细胞实验文献检索——PubMed | MedChemExpress

今天我们就以小白的课题——自噬 (Autophagy) 为例,给大家展示一波。这个时候给大家隆重介绍我们的——PubMed。 PubMed 提到 PubMed,相信大家应该都不陌生,它是常用的国外数据库之一,也是小编查找文献最喜欢的工具。自成立以来…

免费获取论文全文的方法,SCI-HUB的使用教程

很多人不在学校期间需要看文献全文,很多人获取文章的方式或是在网上求助或是给原作者索要。在SCI—HUB出现后,这些麻烦都不需要。SCI—PUB上保存了超过了4700万篇科研文献。SCI—PUB的网址 使用方法: 方法一、打开网页将想要论文的URL地址&…

SCI-HUB丨最新文献网址

sci-hub:在我们获取文献与学术论文的道路上提供了极好的便利,可以从中得到免费的文献下载,但也因为这样遭到各大出版社:ai思为尔,施普林格,wiley等出版社的打击与封杀,使得Sci-Hub在域名上不得不…

pubmed显示服务器不稳定,PubMed天天用,可是你真的用对了吗?

你是用关键词在PubMed上找论文的吗?如果关键词好几个,由于单词间的空格键存在AND命令,导致明明要搜的是词组,搜索不是被放大就是缩小,很难检索到合适量且关联度高的文。例如,你想找和肠炎与肿瘤坏死因子相关…

pubmed文献批量化下载器

1.代码如下 import time import requests import pandas as pd import osdef getArticle(PMCID,NIHMSID,DOI,title,path):print(PMCID,NIHMSID,DOI,title,path)os.chdir(path)headers {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit…

PubMed插件:分区、影响因子和即时IF一目了然,还能秒下文献(亲测有效)

Pubmed作为生物医药研究者最常用的免费文摘数据库,素有检索江湖上的泰山北斗之称,用好Pubmed,其他一切pubmed镜像网站都是浮云。今天小编给大家介绍一款完全免费的无需登录的pubmed插件,他可以解决pubmed本身不显示杂志影响因子的…

干货分享|被PubMed收录的论文,在MEDLINE和SCIE能检索到吗?

PubMed PubMed是由美国国家医学图书馆(National Library of Medicine,NLM)的国家生物技术信息中心(National Center for Biotechnology Information,NCBI)开发研制的一个医学文献网络数据库。PubMed是当今…

MEDLINE与PubMed有什么区别?检索范围包含哪些?

PubMed PubMed是由美国国家医学图书馆(National Library of Medicine,NLM)的国家生物技术信息中心(National Center for Biotechnology Information,NCBI)开发研制的一个医学文献网络数据库。 PubMed是当今…

怎么找生物信息论文的数据,PubMed太有用了!

小白的创作灵感日志: 由于要跑通一篇Paper A的代码,我需要找到它用到的所有数据集,今天我要找的是 Nagano 细胞周期数据集,刚开始脑子一团浆糊,直接在谷歌上搜“Nagano”,出来的全都是日本的一个名叫Nagano…

PubMed文献影响因子怎么显示保姆教程

NCBI文献影响因子显示: 安装的第一个插件:Tampermonkey插件网址:Greasy Fork - 安全、实用的用户脚本大全 1.选择合适的浏览器进行安装 2.点击安装 安装的第二个插件:scholarscope 1.网址:Scholarscope | 更好的科研…

文献管理器PubMedPro使用

PubMedPro介绍 Pubmed.pro文献检索文献管理网站: 您可以将自己电脑中的文献PDF批量上传至本网站,所有文件会自动同步至云端,您可以子啊任意一台电脑、平板、手机,通过自己的账号在线访问文献PDF。也可以分享自己的文献给身边的同…

科研小助手PubMed的插件PubMedy

Scholarscope首页地址: https://www.scholarscope.cn/(此链接就可以帮你安装,里面“查看安装教程”下面有个“立即前往安装教程页面”按钮,点击即可。) 此插件的安装也很简单,在Chrome浏览器的安装跟其他插件的安装没有区别。 而…

PubMed插件神器之PubMedy和Scholarscope(末尾附赠Google截屏神器)

生信读研第一件事绝对是读大量文献,那么如何在PubMed大量的文献中筛选出自己想要并且高质量的呢?当然第一反应肯定是检索式,但这得自己清楚的知道课题的关键词才能准确筛选。 刚进实验室,大师兄就扔给我两篇文献让我去了解。但是!…

jdk完全卸载方法

Win7系统下安装jdk报错;错误信息:“ Windows Installer 程序包有问题。此安装需要的DLL不能运行。请与您的支持人员或程序包开发商联系”。 造成该问题的原因是系统以前安装过jdk,重新安装需要彻底卸载旧的jdk,这样重新安装才能成…

JDK卸载与安装

JDK卸载 **第一步:**通过环境变量找到 JDK安装路径。 **第二步:**删除JDK安装包。 **第三步:**删除JAVA_HOME及path下关于java的目录 **第四步:**打开cmd 命令输入java -version检验是否删除成功。 安装JDK 1、百度搜索JDK8&#xff…

卸载和安装JDK

JDK全称Java Developent Kit,Java跨平台是使用了虚拟机(jvm)在任何地方都可以运行。JDK包含了JRE和JVM。 卸载JDK 1、删除java的安装目录: 右击我的电脑-属性,做已下的操作&…

MacOS安装与卸载JDK

文章目录 1. 下载JDK8安装文件2. 安装JDK文件2.1 双击pkg文件安装即可2.2 查看JDK安装位置2.3 确定jdk安装完整 3. 配置JDK环境变量3.1 打开终端窗口,打开基础配置文件3.2 配置java环境变量3.3 激活配置3.4 输入javac和javap看是否安装成功 4. 卸载JDK(任何版本都行…