计算机编程是把一些实际问题组织并抽象起来的过程,编写程序时,开发人员经常使用团队其他成员编写的代码或者一些第三方工具(如著名的开源库或者框架)。随着项目的扩大.项目中需要依赖的模块会越来越多,这时如何有效地组织这些模块是非常重要的。依赖注入能够有效解决模块问依赖的问题。
依赖注人的英文是Dependency Injection,在软件开发中缩写为DI。依赖注入应用了控制反转的设计思想,因此很多人也称依赖注人为控制反转。控制反转(Inversion of Control,loC)是一个重要的面向对象编程的法则,用来减少计算机程序的耦合问题,它一般分为两种类型——依赖注人和依赖查找(Dependency Lookup)。简单地说,控制反转是一种设计思想,而依赖注入是控制反转思想的一种实现方式。
在程序开发中,组件获取依赖通常有3种方式。
①使用new运算符直接创建出依赖。该方式是在自己的应用程序中创建依赖对象。它有一个弊端,就是当程序的多个模块都需要应用一个对象时,会造成模块之间的高耦合;如果一个对象参数过多,有可能还需要对象创建其他参数对象,所以这种方式无法适合复杂的应用。
②直接引用依赖,如引用全局变量。该方式需要一定的条件,例如依赖对象对于用户对象是直接开放的,这里不做讨论。
③在需要的地方传人依赖。该方式便是依赖注入,它的重要特点是在系统运行中可以把创建依赖对象的控制权交给IoC容器,由IoC容器动态地通过注入的方式,向某个对象提供它所需要的其他对象。这样对象与对象之间松散耦合,方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
依赖注人对编程带来的最大改变不是从代码上(而是从思想上发生了“主从换位”的变化,把应用程序向依赖对象主动出击变为应用程序被动的等待,由IoC容器来创建并注入它所需要的资源。例如将IoC容器看作一个“保姆”,“我”看作用户对象,“蛋糕”看作依赖对象:当“我”想吃“蛋糕”时不是自己来做,而是告诉“保姆”,“保姆”做好之后交给“我”,整个过程如图4-9所示。

在实际开发中,loC容器通常会是一个应用框架,如Spring、AngularJS等:用户对象表示开发人员编写的程序;依赖对象可以是任何用户对象所需要依赖的资源,包括对象、第三方资源、常量等。

依赖注入是什么意思?获取依赖的方式是什么?相关推荐

  1. ASP.NET Core中的依赖注入(2):依赖注入(DI)

    IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用"好莱坞原则"是应用程序以被动的方式实现对流程的定制.我们可以采用若干设计 ...

  2. 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程

    一.依赖注入DI 学习目标 1)搞清楚构造参数依赖注入的过程及类 2)搞清楚注解方式的属性依赖注入在哪里完成的. 学习思路 1)思考我们手写时是如何做的 2)读 spring 源码对比看它的实现 3) ...

  3. php程序设计依赖注入_PHP控制反转和依赖注入

    [TOC] PHP和依赖注入 理论知识 要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversio ...

  4. java 什么时候依赖注入_玩框架java依赖注入 – 何时使用单例

    So I am wondering, should I be using singleton objects as the examples seem to imply? If this is the ...

  5. 框架依赖注入和普通依赖注入_角服务和依赖注入解释

    框架依赖注入和普通依赖注入 服务和喷油器 (Services and Injectors) Components are responsible for the data that renders i ...

  6. 依赖注入(DI)的三种方式

    个人对依赖注入的理解是:为bean所代表的对象的属性赋值 .对象的属性有多种类型,主要包括基本数据类型.String.引用类型.集合类型.属性类型.空字符串以及空值null.在通过配置文件进行依赖注入 ...

  7. php 依赖注入的写法,php的依赖注入详解

    本篇文章讲述了PHP的依赖注入,对于php依赖注入不太了解的同学但是有点感兴趣的那么就更要看看本篇文章咯,废话不多说了,我们直接来看看php的依赖注入吧! 依赖注入 理解:是一种允许我们从硬编码的依赖 ...

  8. NetCore 依赖注入之服务之间的依赖关系

    简单介绍,直接官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspn ...

  9. php 获取object_PHP反射机制实现自动依赖注入

    依赖注入又叫控制反转,使用过框架的人应该都不陌生.很多人一看名字就觉得是非常高大上的东西,就对它望而却步,今天解开他它的神秘面纱.废话不多说,直接上代码: /** * * 工具类,使用该类来实现自动依 ...

  10. Spring学习-理解IOC和依赖注入

    最近刚买了一本介绍ssm框架的书,里面主要对Mybatis.spring.springmvc和redis做了很多的讲解,个人觉得虽然有的内容我看不懂,但是整体上还是不错的.最近正在学习中,一边学习一边 ...

最新文章

  1. 找不到工作,一程序员去帮屠夫卖猪肉 | 每日趣闻
  2. Swift中空合运算符、闭区间运算符、单侧区间、半开区间
  3. (传送门)2/dev/null和/dev/null 21和21/dev/null
  4. 一些日常工具集合(C++代码片段)
  5. python没有上方工具栏_Python体验(08)-图形界面之工具栏和状态栏
  6. css: transform导致文字显示模糊
  7. k8s部署nacos集群:3个pod、连接外部mysql读写分离集群
  8. 浅谈一下这个所谓的特殊算法——动态规划?
  9. 关于盘符里某些文件夹删除不了的解决方案研究
  10. 分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库
  11. 站点信息 统计 内容 概况
  12. compile error
  13. python学习之文件处理
  14. 0145129实验报告(五)
  15. 多媒体计算机软件都包括哪些,多媒体计算机软件都有什么
  16. win7安装iis及web配置教程
  17. Ext JS 6学习文档–第1章–ExtJS入门指南
  18. 基于Python的Climate Indices库计算SPEI(标准化降水蒸散发指数)02—站点SPEI计算
  19. bilibili下载的m4s格式视频如何还原为mp4?
  20. i58250u是低端处理器吗_玩都市天际线要很大的显卡吗

热门文章

  1. Chu-LiuEdmonds算法之无环解析
  2. 【Python】利用format方法保留三位小数
  3. MFC静态文本框的背景色设为透明
  4. win10系统cf连接服务器失败,cf与服务器连接失败
  5. html未知错误,未知错误
  6. 智力大冲浪 (牛客贪心)
  7. 2021 CSP-J复赛 我的备战与游记
  8. c++day06 多态的使用
  9. QQ聊天粘贴的文字变成表情的解决方法
  10. Alist挂载本地磁盘