首页/新闻资讯/正文详情

Spring IoC和DI概念篇

发布时间:2026/9/27 7:55:12 来源:云帆数科 栏目:资讯中心
Spring IoC和DI概念篇
目录一、Spring、Spring MVC、Spring Boot的关系和区别1.1Spring是什么1.2Spring MVC是什么1.3Spring Boot是什么1.4三者关系总结二、IoC入门什么是容器、IoC、DI2.1什么是容器2.2什么是IoC2.3什么是DI三、案例用“造一辆车”理解传统开发与IoC3.1传统程序开发3.2问题分析3.3解决方案3.4IoC优势一、Spring、Spring MVC、Spring Boot的关系和区别1.1Spring是什么Spring是一个开源框架它让我们的开发更加简单。它支持广泛的应用场景有着活跃而庞大的社区这也是Spring能够长久不衰的原因。Spring是包含了众多工具方法的IoC容器。主要功能把对象交给Spring管理、从Spring中获取对象、管理对象、管理对象之间的依赖关系、面向切面编程AOP、数据库事务管理、数据访问、Web框架支持Spring具备高度可开放性并不强制依赖Spring开发者可自由选择Spring的部分或者全部。Spring可以无缝集成第三方框架比如数据访问框架Hibernate、JPA、Web框架Struts、JSF等。1.2Spring MVC是什么Spring MVC是Spring的一个子框架。Spring诞生之后大家觉得好用于是按照MVC模式设计了一个MVC框架主要用于开发Web应用和网络接口。所以Spring MVC是一个Web框架。它基于Spring进行开发天生与Spring框架集成。可以让我们更简洁地进行Web层开发支持灵活地URL到页面控制器地映射提供强大的“约定大于配置”的契约式编程支持非常容易与其他框架集成。1.3Spring Boot是什么Spring Boot式对Spring的一个封装为了简化Spring应用的开发而出现。Spring Boot是个脚手架插拔式搭建项目可以快速集成其他框架进来。比如想使用Spring Boot开发Web项目只需引入Spring MVC框架即可Web开发的工作式Spring MVC完成的而不是Spring Boot 。想完成数据访问只需要引入MyBatis框架即可。Spring Boot只是完成辅助简化项目开发的让开发变得更加简单甚至不需要额外的Web服务器直接生成jar包执行即可。1.4三者关系总结Spring核心框架提供IoC、DI、AOP等Spring MVC基于Spring的Web框架Spring Boot 基于Spring的快速开发整合包。Spring MVC 和Spring Boot都属于Spring Spring MVC是基于Spring的一个MVC框架而Spring Boot是基于Spring的一套快速开发整合包。二、IoC入门什么是容器、IoC、DI2.1什么是容器像之前接触到的 List/Map--数据存储容器、Tomcat--Web容器、Spring--IoC容器2.2什么是IoCIoCInversion of Control控制反转Spring是一个“控制反转”的容器就是获得依赖对象的过程被反转了。当需要某个对象时传统开发模式中需要自己通过new创建对象现在不需要再进行创建把创建对象的任务交给容器程序只需要依赖注入。2.3什么是DIDIDependency Injection依赖注入。容器在运行期间动态地为应用程序提供运行时所依赖地资源称之为依赖注入。程序运行时需要某个资源此时容器就为其提供这个资源。三、案例用“造一辆车”理解传统开发与IoC3.1传统程序开发需求造一辆车。设计先造轮子根据轮子大小设计底盘根据底盘设计车身最后根据车身设计整个汽车。最后程序实现public class NewCarExample { public static void main(String[] args) { Car car new Car(); car.run(); } /** * 汽车对象 */ static class Car { private Framework framework; public Car() { framework new Framework(); System.out.println(Car init....); } public void run() { System.out.println(Car run....); } } /** * 车身类 */ static class Framework { private Bottom bottom; public Framework() { bottom new Bottom(); System.out.println(Framework init....); } } /** * 底盘类 */ static class Bottom { private Tire tire; public Bottom() { this.tire new Tire(); System.out.println(Bottom init....); } } /** * 轮胎类 */ static class Tire { // 尺寸 private int size; public Tire() { this.size 17; System.out.println(轮胎尺寸 size); } } }3.2问题分析这样的设计可维护性很低如果需要加工多种尺寸的轮胎static class Tire { // 尺寸 private int size; public Tire(int size) { this.size size; System.out.println(轮胎尺寸 size); } }修改轮胎后其他调用程序也会报错都要修改这样耦合度非常高。3.3解决方案在初始设计根据轮子的尺寸设计底盘轮子尺寸一改底盘就得改整个设计都得改。那么换个设计思路先设计车子大概样子然后逐步向下这时候就是轮子依赖底盘底盘依赖车身车身依赖汽车。public class IocCarExample { public static void main(String[] args) { Tire tire new Tire(20); Bottom bottom new Bottom(tire); Framework framework new Framework(bottom); Car car new Car(framework); car.run(); } static class Car { private Framework framework; public Car(Framework framework) { this.framework framework; System.out.println(Car init....); } public void run() { System.out.println(Car run...); } } static class Framework { private Bottom bottom; public Framework(Bottom bottom) { this.bottom bottom; System.out.println(Framework init...); } } static class Bottom { private Tire tire; public Bottom(Tire tire) { this.tire tire; System.out.println(Bottom init...); } } static class Tire { private int size; public Tire(int size) { this.size size; System.out.println(轮胎尺寸 size); } } }3.4IoC优势在传统代码中对象创建顺序是Car → Framework → Bottom → Tire改进之后Tire → Bottom → Framework → Car传统代码是 Car 控制并创建了 FrameworkFramework 创建了 Bottom依次往下。而改进之后的控制权发生了反转不再是使用方对象创建并控制依赖对象了而是把依赖对象注入到当前对象中依赖对象的控制权不再由当前类控制了。这样的话即使依赖类发生任何改变当前类都是不受影响的这就是典型的控制反转也就是 IoC 的实现思想。IoC具备以下优点资源不由使用资源的双方管理而是由不使用资源的第三方管理资源集中管理实现资源的可配置和易管理。降低了使用资源双方的依赖程度也就是耦合度

相关推荐

jose 远程 JWKS 缓存类型 JWKSCacheInput 全解析:在无状态云运行时中持久化 JWKS 缓存
jose 远程 JWKS 缓存类型 JWKSCacheInput 全解析:在无状态云运行时中持久化 JWKS 缓存

网络安全认证鉴权后端 【免费下载链接】jose JWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes 项目地址: https://gitcode.com/gh_mirrors/jo/jose 点击查看 免费下载 在 Node.js、浏览… · 2026/9/27 7:55:12

axton-obsidian-visual-skills 常见陷阱清单:文字偏移、元素重叠与中文手写字体失效的真相与解法
axton-obsidian-visual-skills 常见陷阱清单:文字偏移、元素重叠与中文手写字体失效的真相与解法

axton-obsidian-visual-skills 常见陷阱清单:文字偏移、元素重叠与中文手写字体失效的真相与解法 【免费下载链接】axton-obsidian-visual-skills Visual Skills Pack for Obsidian: generate Canvas, Excalidraw, and Mermaid diagrams from text with Claude Code… · 2026/9/27 7:55:12

nexu模型配置完全指南:Nexu Official登录即用 vs BYOK自带API Key怎么选?
nexu模型配置完全指南:Nexu Official登录即用 vs BYOK自带API Key怎么选?

nexu模型配置完全指南:Nexu Official登录即用 vs BYOK自带API Key怎么选? 【免费下载链接】nexu The simplest desktop client for OpenClaw 🦞 — bridge your Agent to WeChat, Feishu, Slack & Discord in one click. Works with Clau… · 2026/9/27 7:55:12

一文搞懂如何让做树洞网站不挂马且SEO排名稳
一文搞懂如何让做树洞网站不挂马且SEO排名稳

一文搞懂如何让做树洞网站不挂马且SEO排名稳 昨天凌晨三点,我接到一个老客户的电话,声音都在抖:“哥,我的树洞网站被黑了,首页全是赌博广告,后台密码改了也没用,现在流量全掉到零了。”这种 网站被黑挂马不知道怎么办… · 2026/9/27 8:37:36

图解 React 源码:Context 原理——从 fiber 树构造视角剖析 Provider 与 Consumer 实现机制
图解 React 源码:Context 原理——从 fiber 树构造视角剖析 Provider 与 Consumer 实现机制

教程前端 【免费下载链接】react-illustration-series 图解react源码, 用大量配图的方式, 致力于将react原理表述清楚. 项目地址: https://gitcode.com/gh_mirrors/re/react-illustration-series 点击查看 免费下载 本篇技术指南以本仓库 context 原理 一文为骨架&… · 2026/9/27 8:37:29

国内织梦和wordpress对比评测:选错CMS,网站做好没人访问
国内织梦和wordpress对比评测:选错CMS,网站做好没人访问

国内织梦和wordpress对比评测:选错CMS,网站做好没人访问 网站做好了没人访问,这不仅是流量焦虑,更是底层架构选型的失败。很多站长盯着页面美观度,却忽略了内容管理系统(CMS)对搜索引擎抓取效率的影响。今天这篇关于… · 2026/9/27 8:37:17

网站标题在哪里改对SEO和性能优化至关重要
网站标题在哪里改对SEO和性能优化至关重要

网站标题在哪里改对SEO和性能优化至关重要 网站做好了没人访问,往往不是内容不行,而是基础配置没搞对。很多站长盯着页面看半天,找不到 网站标题在哪里 ,导致搜索引擎抓取的关键词全错。更隐蔽的是,错误的标题配置会拖累 性能优化… · 2026/9/27 8:37:11

宁夏网站制作避坑指南:搞定域名服务器,看清真实建站报价
宁夏网站制作避坑指南:搞定域名服务器,看清真实建站报价

宁夏网站制作避坑指南:搞定域名服务器,看清真实建站报价 你是不是也卡在这一步?手里拿着域名和服务器账号,看着后台那堆英文代码和配置选项,脑子一片空白。很多银川的老板做宁夏网站制作时,最大的焦虑不是设计好不好看,而是根本搞不懂域名解析、SSL… · 2026/9/27 8:37:11

博弈论算法进阶(四):斐波那契博弈(Fibonacci Game)与齐肯多夫定理(Zeckendorf‘s Theorem)数学解密
博弈论算法进阶(四):斐波那契博弈(Fibonacci Game)与齐肯多夫定理(Zeckendorf‘s Theorem)数学解密

博弈论算法进阶(四):斐波那契博弈(Fibonacci Game)与齐肯多夫定理(Zeckendorfs Theorem)数学解密在经典组合博弈论中,除了巴什博弈、尼姆博弈与威佐夫博弈之外,还有一种动… · 2026/9/27 8:37:11

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码