资讯详情

资讯详情

Spring: IoCDI

1Spring 是什么我们知道了Spring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场景, 有着活跃⽽庞⼤的社区, 这也是Spring能够⻓久不衰的原因.我们⽤⼀句更具体的话来概括Spring, 那就是: Spring 是包含了众多⼯具⽅法的 IoC 容器那问题来了什么是容器什么是 IoC 容器接下来我们⼀起来看容器是⽤来容纳某种物品的基本装置。List/Map - 数据存储容器Tomcat - Web 容器这都是我们学习编程会接触到的容器2什么是 IoCIoC 是Spring的核⼼思想IoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个控制反转的容器什么是控制反转呢? 也就是控制权反转. 什么的控制权发⽣了反转? 获得依赖对象的过程被反转了也就是说, 当需要某个对象时, 传统开发模式中需要⾃⼰通过 new 创建对象, 现在不需要再进⾏创建, 把创建对象的任务交给容器, 程序中只需要依赖注⼊ (Dependency Injection,DI)就可以了.这个容器称为IoC容器. Spring是⼀个IoC容器, 所以有时Spring 也称为Spring 容器控制反转是⼀种思想, 在⽣活中也是处处体现.⽐如⾃动驾驶, 传统驾驶⽅式, ⻋辆的横向和纵向驾驶控制权由驾驶员来控制, 现在交给了驾驶⾃动化系统来控制, 这也是控制反转思想在⽣活中的实现.⽐如招聘, 企业的员⼯招聘,⼊职, 解雇等控制权, 由⽼板转交给给HR(⼈⼒资源)来处理3IoC 介绍传统程序开发我们的实现思路是这样的先设计轮⼦(Tire)然后根据轮⼦的⼤⼩设计底盘(Bottom)接着根据底盘设计⻋⾝(Framework)最 后根据⻋⾝设计好整个汽⻋(Car)。这⾥就出现了⼀个依赖关系汽⻋依赖⻋⾝⻋⾝依赖底盘底 盘依赖轮⼦.这样的设计看起来没问题但是可维护性却很低.接下来需求有了变更: 随着对的⻋的需求量越来越⼤, 个性化需求也会越来越多我们需要加⼯多种尺 ⼨的轮胎.解决⽅案我们尝试换⼀种思路, 我们先设计汽⻋的⼤概样⼦然后根据汽⻋的样⼦来设计⻋⾝根据⻋⾝来设计 底盘最后根据底盘来设计轮⼦. 这时候依赖关系就倒置过来了轮⼦依赖底盘 底盘依赖⻋⾝ ⻋⾝依赖汽⻋这就类似我们打造⼀辆完整的汽⻋, 如果所有的配件都是⾃⼰造那么当客⼾需求发⽣改变的时候 ⽐如轮胎的尺⼨不再是原来的尺⼨了那我们要⾃⼰动⼿来改了但如果我们是把轮胎外包出去那 么即使是轮胎的尺⼨发⽣变变了我们只需要向代理⼯⼚下订单就⾏了我们⾃⾝是不需要出⼒的.4IoC 优势在传统的代码中对象创建顺序是Car - Framework - Bottom - Tire改进之后解耦的代码的对象创建顺序是Tire - Bottom - Framework - Car我们发现了⼀个规律通⽤程序的实现代码类的创建顺序是反的传统代码是 Car 控制并创建了 FrameworkFramework 创建并创建了 Bottom依次往下⽽改进之后的控制权发⽣的反转不再 是使⽤⽅对象创建并控制依赖对象了⽽是把依赖对象注⼊将当前对象中依赖对象的控制权不再由 当前类控制了. 这样的话, 即使依赖类发⽣任何改变当前类都是不受影响的这就是典型的控制反转也就是 IoC 的 实现思想。学到这⾥, 我们⼤概就知道了什么是控制反转了, 那什么是控制反转容器呢, 也就是IoC容器5DI 介绍DI: Dependency Injection(依赖注⼊)容器在运⾏期间, 动态的为应⽤程序提供运⾏时所依赖的资源称之为依赖注⼊。程序运⾏时需要某个资源此时容器就为其提供这个资源.从这点来看, 依赖注⼊DI和控制反转IoC是从不同的⻆度的描述的同⼀件事情依赖注⼊是 从应⽤程序的⻆度来描述, 就是指通过引⼊ IoC 容器利⽤依赖关系注⼊的⽅式实现对象之间的解 耦.IoC 是⼀种思想也是⽬标, ⽽思想只是⼀种指导原则最终还是要有可⾏的落地⽅案⽽ DI 就属于 具体的实现。所以也可以说, DI 是IoC的⼀种实现.⽐如说我今天⼼情⽐较好吃⼀顿好的犒劳犒劳⾃⼰那么吃⼀顿好的是思想和⽬标是IoC但最后我是吃海底捞还是杨国福这就是具体的实现就是 DI。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →