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

Spring的依赖注入,依赖注入的基本原则,依赖注入的优势

文章目录

    • Spring的依赖注入
      • 依赖注入的基本原则
      • 依赖注入有什么优势
      • 查找定位操作与应用代码完全无关。
      • 有哪些不同类型的依赖注入实现方式?
      • 构造器依赖注入和 Setter方法注入的区别

Spring的依赖注入

控制反转IoC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找

依赖注入:相对于IoC而言,依赖注入(DI)更加准确地描述了IoC的设计理念。所谓依赖注入(Dependency Injection),即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。

依赖注入的基本原则

依赖注入的基本原则是:应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由IoC容器负责,“查找资源”的逻辑应该从应用组件的代码中抽取出来,交给IoC容器负责。容器全权负责组件的装配,它会把符合依赖关系的对象通过属性(JavaBean中的setter)或者是构造器传递给需要的对象。

依赖注入有什么优势

依赖注入之所以更流行是因为它是一种更可取的方式:让容器全权负责依赖查询,受管组件只需要暴露JavaBean的setter方法或者带参数的构造器或者接口,使容器可以在初始化时组装对象的依赖关系。其与依赖查找方式相比,主要优势为:

查找定位操作与应用代码完全无关。

不依赖于容器的API,可以很容易地在任何容器以外使用应用对象。
不需要特殊的接口,绝大多数对象可以做到完全不必依赖容器。

有哪些不同类型的依赖注入实现方式?

依赖注入是时下最流行的IoC实现方式,依赖注入分为接口注入(Interface Injection),Setter方法注入(Setter Injection)和构造器注入(Constructor Injection)三种方式。其中接口注入由于在灵活性和易用性比较差,现在从Spring4开始已被废弃。

构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

构造器依赖注入和 Setter方法注入的区别

在这里插入图片描述

两种依赖方式都可以使用,构造器注入和Setter方法注入。最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖。

相关文章:

Spring的依赖注入,依赖注入的基本原则,依赖注入的优势

文章目录 Spring的依赖注入依赖注入的基本原则依赖注入有什么优势查找定位操作与应用代码完全无关。有哪些不同类型的依赖注入实现方式?构造器依赖注入和 Setter方法注入的区别 Spring的依赖注入 控制反转IoC是一个很大的概念,可以用不同的方式来实现。…...

Git远程仓库常用开发命令和理解

远程仓库 创建与合并分支 每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。 HEAD严格来说不是指向提交,而…...

Unknown error 1054

MySQL错误1054是“Unknown column”的错误,意味着在查询或语句中引用了一个不存在的列名。这通常是因为在查询中指定了一个不存在的列名。 解决步骤: 检查列名的拼写:确保在查询或语句中正确地输入了列名。检查大小写,确保与数据…...

pandas教程:Interfacing Between pandas and Model Code pandas与建模代码间的交互

文章目录 Chapter13 Introduction to Modeling Libraries in Python(Python中建模库的介绍)13.1 Interfacing Between pandas and Model Code(pandas与建模代码间的交互) Chapter13 Introduction to Modeling Libraries in Python…...

鸿蒙应用开发-初见:ArkTS

作者:HarderCoder ArkTS ArkTS围绕应用开发在 TypeScript (简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 基本语法 …...

HTTP 和 HTTPS 之间除了安全性区别外,还有哪些区别

HTTP 和 HTTPS 是两种常见的网络协议,它们都是用于在浏览器和服务器之间传输数据的。但是,它们之间也有一些重要的区别,这些区别涉及到数据的安全性、传输性能、使用成本和搜索排名等方面。本文将从以下几个方面来介绍 HTTP 和 HTTPS 的区别&…...

小内存服务器生存指南 ——SWAP 虚拟内存

人们常说,网络是服务器的生命线,没有了网络,服务器再怎么牛逼,都跑不起来。然而偏偏有这么一票的服务器,它的网络很好,CPU 也很好,就是内存有点小。他们是主机界的独行侠 —— 入门级 VPS 服务器。 前俩天买的一台 TMT 的服务器就是这个类型: 256M 内存CPU 1vCore (2.…...

Linux 内存管理中的 Buffers 和 Cached:理解和区分

引言 当涉及到 Linux 系统的内存管理时,“Buffers” 和 “Cached” 是两个经常会引起混淆的术语。这两个概念都代表了系统内存的一部分,但它们的作用和工作方式有所不同。 区别: Buffers: Buffers(缓冲区&#xff0…...

Linux——使用命令查看文件和文件夹数量

目录 一、相关命令参数解析二、查看当前目录下的文件数量2.1 包含子目录中的文件2.2 不包含子目录中的目录 三、查看当前目录下的文件夹个数3.1 不包含目录中的目录3.2 包含目录中的目录 四、查看当前文件夹下叫某某的文件的数量实例 五、总结 一、相关命令参数解析 "&qu…...

[蓝桥杯训练]———高精度乘法、除法

高精度乘法、除法 一、高精度乘法⭐1.1 初步理解1.1.1 高精度的定义1.1.2 为什么会有高精度1.1.3 高精度乘法的复杂度 1.2 思想讲解1.3 代码实现1.3.1 声明1.3.2 实现高精度乘法1.3.3 整体实现1.3.4 代码测试 二、高精度除法⭐2.1 初步理解2.2 思想讲解2.3 代码实现2.3.1 声明2…...

使用javascript 点击tab栏切换事件代码记录

如下图实现以下两点功能&#xff1a; 这里做代码记录 1. javascript 点击tab栏动态切换内容&#xff0c;并添加active 2. javascript 点击左右图标可以向左或者向右移动元素 第1点功能&#xff1a; // tab栏 <div class"left"><span class"tab act…...

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例

零基础编程入门视频教程&#xff0c;零基础编程从哪学起&#xff0c;分享中文编程工具构件实例 1、零基础编程入门视频教程&#xff0c;系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…...

计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(订单和AOP)

计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现&#xff08;订单和AOP&#xff09; 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先&#xff0c;通过深入分析项目所需数据&#xff0c;包括用户、商品、商品类别、收藏、订单、购物车…...

【Skynet 入门实战练习】实现网关服务 | 用户代理 | RPC 协议 | 客户端

文章目录 前言网关服务RPC 协议看门狗服务代理服务客户端逻辑梳理 前言 上两章学习了如何搭建一个项目&#xff0c;简单实现了几个基础模块。本章节会实现基本的客户端与服务端的通信&#xff0c;包括网关&#xff08;gate&#xff09;、看门狗&#xff08;watchdog&#xff0…...

eclipse - jee 建立项目后没有 web.xml

eclipse -- jee 建立项目后没有 web.xml 处理它的方法是&#xff0c;点 File - New - Dynamic Web Project , 此时起一个项目名如M4 然后next 然后next 出现如此所示:...

Miniconda虚拟环境安装(chatglm2大模型安装步骤二)

1.服务器配置 服务器系统&#xff1a;Centos7.9 x64 显卡&#xff1a;RTX3090 &#xff08;24G&#xff09; 2.安装环境 2.1 检查conda是否安装 输入命令&#xff1a;conda -V 如果显示conda 4.7.12&#xff0c;说明已经有不需要安装 2.2 安装Miniconda 在家目录建一个mi…...

C++学习之路(四)C++ 实现简单的待办事项列表命令行应用 - 示例代码拆分讲解

本期示例介绍: 本期示例《待办事项列表应用》展示了一个简单的任务管理系统&#xff0c;用户可以通过命令行界面执行添加任务、删除任务和显示任务列表等操作。 功能描述&#xff1a; 添加任务功能&#xff1a; 用户可以输入任务描述&#xff0c;将新的任务添加到任务列表中。…...

函数指针数组指针数组传参的本质字符指针

&#x1f680; 作者&#xff1a;阿辉不一般 &#x1f680; 你说呢&#xff1a;不服输的你&#xff0c;他们拿什么赢 &#x1f680; 专栏&#xff1a;爱上C语言 &#x1f680;作图工具&#xff1a;draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话&#xff0c;还请点赞…...

Linux swapon命令教程:如何在Linux中启用和禁用交换空间(附实例教程和注意事项)

Linux swapon命令介绍 Linux的swapon命令用于启用指定设备和文件的交换。当物理内存&#xff08;RAM&#xff09;达到其最大容量时&#xff0c;Linux使用交换空间。如果系统需要更多的内存&#xff0c;而RAM不足&#xff0c;内存中的非活动页面将被移动到交换空间。交换空间是…...

云计算领域的第三代浪潮!

根据IDC不久前公布的数据&#xff0c;2023年上半年中国公有云服务整体市场规模(IaaS/PaaS/SaaS)为190.1亿美元&#xff0c;阿里云IaaS、PaaS市场份额分别为29.9%和27.9%&#xff0c;都远超第二名&#xff0c;是无可置疑的行业领头羊。 随着人工智能&#xff08;AI&#xff09;…...

HoRain云--OpenCod安装

&#x1f3ac; HoRain 云小助手&#xff1a;个人主页 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...

内存泄漏的定位技巧:以Java应用为例

在复杂的软件系统中&#xff0c;内存泄漏犹如一颗隐形的定时炸弹&#xff0c;其破坏力随着系统运行时间的增长而累积。对于软件测试从业者而言&#xff0c;掌握高效、精准的内存泄漏定位技巧&#xff0c;不仅是保障系统稳定性的关键&#xff0c;更是提升测试深度与专业性的重要…...

5个维度解析League-Toolkit:让英雄联盟玩家实现数据驱动的游戏精进

5个维度解析League-Toolkit&#xff1a;让英雄联盟玩家实现数据驱动的游戏精进 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 引言&#xff1…...

告别枯燥理论:用GhostPack的Certify和Rubeus,5步搞定Active Directory证书服务(ADCS) ESC1漏洞检测与利用

实战ADCS漏洞利用&#xff1a;从零构建ESC1攻击链的完整指南 Active Directory证书服务(ADCS)作为企业身份验证基础设施的核心组件&#xff0c;其安全配置往往被低估。当证书模板配置不当&#xff0c;攻击者可能利用ESC1漏洞实现从普通域用户到域管理员的权限提升。本文将带您搭…...

深度解析Windows驱动管理:DriverStore Explorer高效清理冗余驱动实战指南

深度解析Windows驱动管理&#xff1a;DriverStore Explorer高效清理冗余驱动实战指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer DriverStore Explorer&#xff08;简称RAPR&#x…...

【EI复现】【基于改进粒子群算法求解】一种建筑集成光储系统规划运行综合优化方法附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…...

前端骨架搭建

一、安装UI与功能库在终端运行以下命令npm install arco-design/web-vuenpm install lucide-vue-nextnpm install md-editor-v3npm install pinia axios分别安装预计项目所需的UI库、图标库、编辑器、状态管理功能。检查node版本&#xff0c;发现其为过时的v16版本&#xff0c;…...

解密技术的范式革新:RPGMakerDecrypter如何重构游戏创作生态

解密技术的范式革新&#xff1a;RPGMakerDecrypter如何重构游戏创作生态 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirror…...

从零到一:手把手教你用苍穹外卖项目搞定Spring Boot多表关联(附完整E-R图与避坑指南)

从零到一&#xff1a;手把手教你用苍穹外卖项目搞定Spring Boot多表关联&#xff08;附完整E-R图与避坑指南&#xff09; 当你第一次面对一个真实的外卖系统开发需求时&#xff0c;那些看似简单的"分类-菜品-套餐"关系背后&#xff0c;往往隐藏着令人头疼的数据库设计…...

【Netty】【调试工具】----Windows上网络调试助手NetAssist的使用(Java 开发者实用指南)

NetAssist是Windows下轻量免装的TCP/UDP调试工具&#xff0c;对Java开发者核心价值是快速模拟网络对端、裸抓报文、联调硬件/第三方接口&#xff0c;大幅降低网络编程调试成本。一、Java开发者用它的核心用处 网络编程快速验证 不用写完整客户端/服务端&#xff0c;用NetAssist…...