Spring的三种注入方式的优缺点分析

在 Spring 中,提供了三种依赖注入(也被称之为 "对象注入","属性装配"等)的方式,这篇博客我们来分析一下这三种方式各有哪些优缺点。

一、属性注入

优点

简洁,使用方便。

缺点

▪ 只能用于 IoC 容器,如果是非 IoC 容器不可用,并且只有在使用的时候才会出现 NPE(空指

针异常);

▪ 不能注入⼀个 Final 修饰的属性。

二、构造函数注入

此方式推荐 Spring 4.X 进行使用

优点

▪ 可以注入 final 修饰的属性;

▪ 注入的对象不会被修改;

▪ 依赖对象在使用前,一定会被完全初始化,因为依赖是在类的构造方法中执行的,而构造方法

是在类加载阶段就会执行的方法;

▪ 通用性好, 构造方法是 JDK 支持的, 所以更换任何框架,他都是适用的。

缺点

▪ 注入多个对象时, 代码会比较繁琐。

三、Setter注入

此方式推荐 Spring 3.X进行使用

优点

方便在类实例之后, 重新对该对象进行配置或者注⼊

缺点

▪ 不能注入⼀个 Final 修饰的属性

▪ 注入对象可能会被改变, 因为 setter 方法可能会被多次调⽤, 就有被修改的风险。

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

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

相关文章

竞赛选题 卷积神经网络手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

C++内存的一些知识点

一、内存分区 在C中,内存主要分为以下几个区域: 代码区:存放函数体的二进制代码。 全局/静态存储区:存放全局变量和静态变量,这些变量在程序的整个运行期间都存在。常量存储区:存放常量,这些值…

学懂C#编程:实用方法——string字符串指定连接符拼接之 string.Join 的详细用法

在C#中,string.Join 方法用于将一个字符串数组或集合中的元素连接成一个单一的字符串,并在每个元素之间插入指定的分隔符。这个方法非常有用,特别是在需要将多个字符串合并成一个字符串时。以下是 string.Join 方法的详细用法: 方…

WPF UI 界面布局 魔术棒 文字笔记识别 技能提升 布局功能扩展与自定义 继承Panel的对象,测量与排列 系列七

应用开发第一步 功能分类:页面上的功能区域划分。。。。需求分析 业务逻辑 数据流 功能模块 UI/UX 编码 测试 发布 功能开发与布局 不用显式的方式设定元素的尺寸 不使用屏幕坐标来指定位置 Grid 功能最强大,布局最灵活的容器…

卷积神经网络:目标检测的黄金钥匙

标题:卷积神经网络:目标检测的黄金钥匙 卷积神经网络(CNN)是深度学习中用于处理具有网格结构数据(如图像)的强大工具。在目标检测任务中,CNN不仅提升了检测的准确性,还极大地推动了…

开发个人Go-ChatGPT--5 模型管理 (一)

开发个人Go-ChatGP–5 模型管理 (一) 背景 开发一个chatGPT的网站,后端服务如何实现与大模型的对话?是整个项目中开发困难较大的点。 如何实现上图的聊天对话功能?在开发后端的时候,如何实现stream的响应呢?本文就…

Vue-Router4.0 报“Cannot read property ‘forEach‘ of undefined”

Vue-Router4.0在创建路由时 报“Cannot read property ‘forEach‘ of undefined” 解决办法 将路由规则名称更改为routes,否则报错 import { createWebHashHistory, createRouter } from vue-router; // 创建路由规定 const routes [{path: /login,name: login,co…

Linux Docker 防火墙设置 放通 MySQL(3306) Redis(6379) 端口

Linux Docker 防火墙设置 放通 MySQL(3306) Redis(6379) 端口,使用firewalld 防火墙或iptables ,因此尝试重新启动 firewalld 服务,添加防火墙规则,并检查防火墙状态。以下是详细步骤: 1. 启动 firewalld 服务 首先启…

qt opencv 应用举例

在Qt中使用OpenCV可以实现各种图像处理和计算机视觉任务。以下是一些Qt与OpenCV联合应用的具体举例: 1. 图像读取与显示 读取图像:使用OpenCV的imread函数可以方便地读取各种格式的图像文件,如.bmp、.jpg、.png等。这个函数返回一个Mat对象…

【Unity数据交互】Unity中使用二进制进行数据持久化

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧&…

SqlSugar分表笔记

1、使用SqlSugar的分表功能时,.net要使用.net core; 我开始使用的是.net freamwork4.72,程序报异常,没能解决,换到.net core下面就正常; 2、SqlSugar自带分表支持按季度、月、周、日进行分表&#x…

ArcGIS Pro SDK (七)编辑 15 版本控制选项

ArcGIS Pro SDK (七)编辑 15 版本控制选项 文章目录 ArcGIS Pro SDK (七)编辑 15 版本控制选项获取和设置版本控制选项 环境:Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 获取和设置版本控制选项 var vOptions A…

PostgreSQL 技术内幕(十七):FDW 实现原理与源码解析

对于一定规模的系统而言,数据仓库往往需要访问外部数据来完成分析和计算。外部数据包装器(Foreign Data Wrapper, 简称 FDW)是 PostgreSQL 提供的访问外部数据源机制。用户可以使用简单的 SQL 语句访问和操作外部数据源&#xff0…

Python面试题:Python 中的生成器(generator)是什么?有什么优点?

在Python中,生成器(generator)是一种特殊的迭代器,使用yield关键字生成值,可以逐个生成序列中的值,而不需要一次性将所有值加载到内存中。生成器函数在定义时使用def关键字,并包含一个或多个yie…

[word] Word如何快速生成一段文本 #知识分享#学习方法

Word如何快速生成一段文本 Word如何快速生成一段文本?有时候我们会用一大段文字来做一些功能测试,不少朋友的做法就是脸滚键盘,一顿乱按,这样看起来文笔不通,看着也会比较难受,测试功能的效果也不怎么理想…

uniapp中实现跳转链接到游览器(安卓-h5)

uniapp中实现跳转链接到游览器(安卓-h5) 项目中需要做到跳转到外部链接,网上找了很多都不是很符合自己的要求,需要编译成app后是跳转到游览器打开链接,编译成web是在新窗口打开链接。实现的代码如下: 效果&…

java基于ssm+vue 旅游信息资源平台

1前台首页功能模块 旅游资源网站 ,在系统首页可以查看首页、景点信息、酒店信息、客房信息、交流论坛、红色文化、个人中心、后台管理、客服等内容,如图1所示。 图1系统功能界面图 用户登录、用户注册,在注册页面可以填写用户名、密码、姓名…

Redis GEO 功能解析

Redis GEO 功能解析 引言 Redis GEO 是 Redis 数据库提供的一个特殊功能,用于存储地理位置信息,并支持基于地理位置的查询。这一功能对于需要处理地理位置数据的现代应用程序来说非常宝贵,如外卖配送、社交媒体、地图服务等。本文将详细介绍 Redis GEO 的功能、使用方法,…

DFS之剪枝与优化——AcWing 165. 小猫爬山

DFS之剪枝与优化 定义 DFS之剪枝与优化指的是在执行深度优先搜索(DFS, Depth-First Search)时,采取的一系列策略来减少搜索空间,避免无效计算,从而加速找到问题的解。剪枝是指在搜索过程中,当遇到某些条件不符合解的要求或者可以…

产科管理信息系统源码:产科电子病历、高危孕产妇五色管理系统源码 孕产妇健康管理信息平台源码

产科管理信息系统源码:产科电子病历、高危孕产妇五色管理系统源码 孕产妇健康管理信息平台源码 产科电子病历系统是以采集病人在整个医疗护理过程中所产生的各种信息。包括病案首页、门诊病历、住院病历、出院记录、病人病程记录等全部病历文书;涵盖文字…