`

对IOC/DI的理解(转载自开涛的博客)

 
阅读更多
IOC

1. IoC: Inversion of Control,控制反转, 控制权从应用程序转移到框架(如IoC容器),是框架共有特性 .
1.1、为什么需要IoC容器
IoC(控制反转)容器:容器主动控制
本质:创建对象和装配对象、管理对象生命周期
被动实例化,被动接受依赖,被动装配
(工厂+反射+xml配置文件)
通用
1.2、IoC容器特点
【1】无需主动new对象;而是描述对象应该如何被创建即可
IoC容器帮你创建,即被动实例化;
【2】不需要主动装配对象之间的依赖关系,而是描述需要哪个服务(组件),
IoC容器会帮你装配(即负责将它们关联在一起),被动接受装配;
【3】主动变被动,好莱坞法则:别打电话给我们,我们会打给你;
【4】迪米特法则(最少知识原则):不知道依赖的具体实现,只知道需要提供某类服务的对象(面向抽象编程),松散耦合,一个对象应当对其他对象有尽可能少的了解,不和陌生人(实现)说话
【5】IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。
1.3、理解IoC容器问题关键:控制的哪些方面被反转了?
1、谁控制谁?为什么叫反转? ------ IoC容器控制,而以前是应用程序控制,所以叫反转
2、控制什么? ------ 控制应用程序所需要的资源(对象、文件……)
3、为什么控制? ------ 解耦组件之间的关系
4、控制的哪些方面被反转了? ------ 程序的控制权发生了反转:从应用程序转移到了IoC容器。
2.1、什么是DI
DI:依赖注入(Dependency Injection) :用一个单独的对象(装配器)来装配对象之间的依赖关系 。
2.2、理解DI问题关键
谁依赖于谁? ------- 应用程序依赖于IoC容器
为什么需要依赖? ------- 应用程序依赖于IoC容器装配类之间的关系
依赖什么东西? ------- 依赖了IoC容器的装配功能
谁注入于谁? ------- IoC容器注入应用程序
注入什么东西? ------- 注入应用程序需要的资源(类之间的关系)
更能描述容器其特点的名字——“依赖注入”(Dependency Injection)
IoC容器应该具有依赖注入功能,因此也可以叫DI容器
2.3、DI优点
【1】帮你看清组件之间的依赖关系,只需要观察依赖注入的机制(setter/构造器),就可以掌握整个依赖(类与类之间的关系)。
【2】组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
【3】依赖注入的目标并非为软件系统带来更多的功能,而是为了提升组件重用的概率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不用关心具体的资源来自何处、由谁实现
使用DI限制:组件和装配器(IoC容器)之间不会有依赖关系,因此组件无法从装配器那里获得更多服务,只能获得配置信息中所提供的那些。
2.4、实现方式
1、构造器注入
2、setter注入
3、接口注入:在接口中定义需要注入的信息,并通过接口完成注入
其原理是基于OO设计原则的The Hollywood Principle:Don‘t call us, we’ll call you(别找我,我会来找你的)。也就是说,所有的组件都是被动的(Passive),所有的组件初始化和装配都由容器负责。组件处在一个容器当中,由容器负责管理。
2.5 IoC容器功能:实例化、初始化组件、装配组件依赖关系、负责组件生命周期管理。
本质:
IoC:控制权的转移,由应用程序转移到框架;
IoC/DI容器:由应用程序主动实例化对象变被动等待对象(被动实例化);
DI: 由专门的装配器装配组件之间的关系;
IoC/DI容器:由应用程序主动装配对象的依赖变应用程序被动接受依赖
分享到:
评论

相关推荐

    基于JAVA的IOC/DI框架的设计与实现

    本文阐述一个IOC/DI框架的设计与实现。本框架是一个可复用的设计构件,是一种多层的J2EE应用程序框架,其核心就是提供 一种新的机制管理业务对象及其依赖关东,可以有效的降低软件开发问题的复杂度。

    dijon, 在Javascript中,由Robotlegs和Swiftsuspenders激发的,ioc/di框架.zip

    dijon, 在Javascript中,由Robotlegs和Swiftsuspenders激发的,ioc/di框架 DIJON框架 Dijon是用于Javascript的IOC和DI微框架。 最初它是一个Robotlegs端口,但却偏离了一些完全不同的地方。 它仍然受到Robotlegs的...

    使用Spring IOC/DI 模拟某超市管理功能

    (4)MarketService 类:模拟业务逻辑层,包含属性对象MarketDao dao,通过调用MarketDao类中的方法来实现对商品仓库的查询、添加、删除等功能,并为属性生成set方法。 (5)MarketController:模拟控制层,包含属性...

    什么是Ioc和DI

    什么是Ioc和DI

    IOC(DI)与AOP概念的理解

    IOC(DI)与AOP概念的理解

    jBeanBox是一个微形但功能较齐全的IOC/AOP工具,用于Java6或以上环境

    jBeanBox是一个微形但功能较齐全的IOC/AOP工具,用于Java6或以上环境。 jBeanBox项目的定位:需要一个功能较全的IOC/AOP工具,但是又不想引入臃肿的Spring。 其它IOC/AOP工具的问题: Spring: 源码臃肿,Java方式...

    IoCDI和RPC框架实现源码.zip

    实现一个IoC/DI容器参考网址:https://blog.csdn.net/weixin_43042683/article/details/106456415 实现一个RPC框架参考网址: https://blog.csdn.net/weixin_43042683/article/details/106459282

    Spring中IOC/AOP的说明和例子

    Spring中IOC/AOP的说明和例子

    在X++中使用IoC/DI模式应对不断变化的客户需求

    IoC/DI(InverseofControl/DependencyInjection,控制反转/依赖注入)模式是一种企业级架构模式,通过将应用程序控制权反转交移给框架,并以构造器注入、属性设置器注入等方式将类实体注入到特定应用层中,最终实现...

    springIOC和DI

    什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码

    关于spring的AOP ,IOC,DI的理解

    帮助初学者理解spring框架,有助于提高代码能力java.sql.SQLException: Duplicate entry '2' for key 'PRIMARY' Query: insert into transaction values(?,?,?,?,?) Parameters: [2, 6212999999999, 转出, 6000000, ...

    Ioc, DI demo

    Ioc, DI demo, IocPerformance-master

    手写IOC,DI,servlet

    手写的IOC,DI,只用到了javax.servlet.*下的包,没有其他工具包。本人手写,绝对可用,jdk1.8环境

    深入理解DIP、IoC、DI以及IoC容器

    其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC、DI以及Ioc容器等概念。通过本文我们将一起学习这些概念,并理清他们之间微妙的关系。对于大部分小菜来说,当听到大牛们高谈DIP、IoC、DI以及...

    Spring IOC和DI实现原理及实例解析

    主要介绍了Spring IOC和DI实现原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    brisk-ioc:fast light brisk iocdi container on nodejs; Node下快速 轻量的IoCDI容器,依赖注入,配合装饰器使用

    BriskIoCBriskIoC is a fast, light-weight, brisk IoC/DI container to work in nodejs. It references the decorator of Spring framework and changes some usage in javascript.BriskIoC是一个快速、轻量级、...

    ASP.NET Core应用中与第三方IoC/DI框架的整合

    ASP.NET Core应用中,针对第三方DI框架的整合可以通过在定义Startup类型的ConfigureServices方法返回一个ServiceProvider来实现。但是并不是那么容易的,下面通过实例给大家分享一下

    di_ioc_c#.zip

    依赖注入和IoC乍一看似乎很复杂,但是它们很容易学习和理解。 在本文中,我们将通过在C#中重构一个非常简单的代码示例来说明依赖注入和IoC容器。

    由浅入深理解 IOC 和 DI.pdf

    开闭原则 OCP(Open Closed Principle) 对扩展开放,对修改封闭。 修改一处代码可能会引起其他地方的 bug ,最好的方式就是新增业务模块/类代替原来的业务 模块/类,使出现 bug 的几率变小。 必须满足此原则的代码才能...

Global site tag (gtag.js) - Google Analytics