新闻详情

新闻详情

首页 / 资讯中心 / 详情

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具备以下优点资源不由使用资源的双方管理而是由不使用资源的第三方管理资源集中管理实现资源的可配置和易管理。降低了使用资源双方的依赖程度也就是耦合度
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

第243篇_民宿短租平台房源与评价采集 2026/9/27 9:32:50

第243篇_民宿短租平台房源与评价采集

【Python爬虫实战】第243篇:房源表和评价表一起拉——民宿短租平台房源信息与用户评价全量抓取实战 所属专栏:【Python爬虫实战】从零到企业级爬虫工程师(CSDN 付费专栏) 本篇篇目:第 243 篇(垂直行业数据采集专题) 难度等级:中级,双表关联采集 阅读时长:约 35 分钟(…

阅读更多 →
rtl_433 JSON 数据输出格式详解:字段规范、单位转换与消息完整性校验 2026/9/27 9:32:50

rtl_433 JSON 数据输出格式详解:字段规范、单位转换与消息完整性校验

物联网 【免费下载链接】rtl_433 Program to decode radio transmissions from devices on the ISM bands (and other frequencies) 项目地址: https://gitcode.com/gh_mirrors/rt/rtl_433 点击查看 免费下载 导读 rtl_433 是一款用于解码 ISM 频段(以…

阅读更多 →
NodeMCU file_lfs 模块实战:将任意文件嵌入 Lua Flash Store 并透明读写 2026/9/27 9:32:42

NodeMCU file_lfs 模块实战:将任意文件嵌入 Lua Flash Store 并透明读写

物联网嵌入式 【免费下载链接】nodemcu-firmware Lua based interactive firmware for ESP8266, ESP8285 and ESP32 项目地址: https://gitcode.com/gh_mirrors/no/nodemcu-firmware 点击查看 免费下载 本指南围绕 NodeMCU 固件仓库中的 file_lfs 模块文档 展开&am…

阅读更多 →
计及需求侧响应日前、日内两阶段鲁棒备用优化附Matlab代码 2026/9/27 9:32:42

计及需求侧响应日前、日内两阶段鲁棒备用优化附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。🍎 往期回顾关注个人主页:完整代码获取 定制创新 论文复现私信🍊个人信条:做科研&#xff0c…

阅读更多 →
IDEA搭建SpringMVC入门程序(1) 2026/9/27 9:32:34

IDEA搭建SpringMVC入门程序(1)

工具: IDEA 2020.1 Ultimate版 maven 3.6.3 JDK 1.8 1.创建项目 打开IDEA,点击“File—>New—>Project” 我们 选择“Maven”项目, JDK这里选择1.8版本,下面勾选maven-archtype-webapp,然后点击“Next” 来到下面的界面…

阅读更多 →
wordpress3.8中文标签建站报价揭秘 2026/9/27 9:32:14

wordpress3.8中文标签建站报价揭秘

wordpress3.8中文标签建站报价揭秘 备案流程一头雾水?很多老板在拿到建站报价单后,第一反应不是看价格,而是盯着那几行关于“ICP备案”的条款发呆。你以为付了钱,网站就能立马上线?错。在中国大陆,没有备案的域名无法解析到国内服务器,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉