一分钟总结Spring的IOC和DI
admin
2024-04-18 06:05:40
0

IOC Inverse of control 控制反转 

IoC(控制反转)就是将程序中原来 new 对象,交给spring创建,从spring工厂获取对象,使用spring来负责控制对象的生命周期和对象间的关系.

Spring所倡导的开发方式——所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

IOC是什么 用的目的 什么是控制反转(举例:生活中、代码)

IOC是控制反转,主要用于:1、对象创建 2、依赖管理 目的就是为了解耦合,使代码具有更高的扩展性和维护性。

什么是控制反转?

控制反转是一种通过描述(XML或注解)并通过第三方生产或获取特定对象的方式。

在传统模式中,对象由程序员主动创建,控制权在程序员手中。如果用户需求变更,程序员就要修改对应的代码,,修改一次需求,或多或少会造成代码的修改,这个问题就是耦合性过高引起的。

IoC的主要思想是借助一个“第三方”来拆开原本耦合的对象,并将这些对象都与“第三方”建立联系,由第三方来创建、操作 这些对象,进而达到解耦的目的。

IoC的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,

生活中:1. 如共享单车 只拥有他的使用权,而不是所有权

2. 如你把买房子的需求交给房产中介 而不是自己搭建 控制权在房产中介手上(控制反转),而建房子的开放商是服务提供者,房产中介根据需求把房子提供给小明,就是依赖注入

3.如在相亲网站 也是提需求 相亲网站按照你的要求给你找对象

正转: 如拥有所有权 直接耦合 A类使用B类 A类创建B类对象

反转:A类使用B类的步骤:Spring管理B类对象 A类找Spring要B类对象,B类对象的所有权属于Spring A类只拥有使用权 对B类的控制权交给Spring

那么到底是“哪些方面的控制被反转了呢?”

获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。

实现IOC的方法:注入。

所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

DI Dependency Injection 依赖注入

“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”

  • 谁依赖于谁:当然是应用程序依赖于IoC容器;

  • 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

  • 谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

  • 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(依赖注入)来实现的。

比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢?Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

IOC和DI的关系


IOC和DI虽然定义不同,但他们所做的事情都是一样的,就是都是用来实现对象解耦的。

不同之处是IOC是一种设计思想,而DI是一种具体的实现技术
 

相关内容

热门资讯

魂祭加速器怎么选?2024高性... 动作类游戏对网络延迟和连接稳定性极为敏感,尤其像《魂祭》这类强调实时反应、连招节奏与关卡推进速度的作...
《魔王城物语》部署图详解:角色... 许多初次接触《魔王城物语》的新手玩家,对“部署图”这一核心概念仍感到陌生。本期内容将系统解析部署图的...
龙魂旅人中智慧巨人密米尔角色详... 龙魂旅人全新角色密米尔将于3月20日正式上线,作为备受期待的高人气射手型幻灵,其兼具战术深度与实战强...
反恐精英OL卖号平台推荐:安全... 《反恐精英OL》作为一代经典FPS网游,陪伴了无数玩家走过学生时代与青春岁月。无论是紧张激烈的竞技对...
图片转Word文档免费工具推荐... 面对一张满是文字的图片,如何快速提取内容并生成可编辑的Word文档?这是许多上班族、学生党在日常办公...
2026最火的小游戏推荐:全网... 轻量级休闲游戏合集涵盖多种风格与主题,每款作品均经过精简优化,运行所需内存占用极低,全程流畅无卡顿,...
命运扳机伊欧斯狙击点位全攻略:... 伊欧斯是《命运扳机》中人气较高的远程输出型角色,其核心玩法围绕高精度狙击与灵活位移展开。合理规划狙击...
绿梦时空之声游戏介绍及所属国家... 《绿梦:时空之声》是一款由国内独立团队“绿梦工作室”自主研发的横版动作类银河恶魔城游戏,融合二次元美...
蓝色星原旅谣新手入门指南:开荒... 《蓝色星原旅谣》正式上线后,凭借高质感战斗演出与沉浸式开放世界设定,迅速收获大量新玩家关注。仅观看实...
蓝色星原旅谣测试招募参与方法及... 近期备受二次元玩家期待的《蓝色星原:旅谣》即将开启第二轮测试招募。在当前二次元手游竞争日趋白热化的环...