原文作者:悬壶醉世

原文地址:为什么我们需要依赖注入?

以前刚入行的时候一直很困惑,spring这个东西为什么把new一个对象的事情搞这么麻烦。后来慢慢入行这才了解了依赖注入是怎么一回事。本文决定非常浅显的给大家聊聊依赖注入。我们的疑问是从Spring框架的xml开始的,这个xml被人诟病已久。其实呢依赖注入并非值得是用xml来new对象,依赖注入其实是一种思想,一种方法。而xml是它最菜的实现方式。。由浅入深慢慢来~~~~~~

第一步:为什么我们不能new对象?

随时随地new对象会引发一个问题,就是你new的实例会满天飞。这样一来你每一个实体进行扩充,修改,放弃的时候你就需要满世界的找对象,一个一个改过来。例如:

collection  map=new HashMap();

有一天老大跟你说 HashMap不太行,全部换成新版的XXXXMap吧~~~你是不是需要全部一起换?所以这时候我们需要通过工厂模式来管理对象了。代码如下:

collection  map=MapFactory.createMap();

这样一来,我们随时想替换掉HashMap就变得非常简单了。

第二步:为什么我们不用工厂模式,而要专门做依赖注入框架。

当你只需要一个Map对象的时候很简单。这没错~~~但是你需要创建的对象是一个多层次的对象呢?这样问题就来了。例如,我要一辆车,那么就需要轮胎,我需要一个轮胎,那么就需要一个轮毂,若干螺丝,外胎,内胎,刹车……那么问题就来了。我应该做的是造车的时候再种橡胶树么?这样不对啊。我们应该做的是,在造车的时候,就发现已经有了生产完全的轮胎,直接调用轮胎装上去就行了。至于轮胎里面需要什么东西,我不是重新做,而是直接调用现成的东西。这就是依赖注入。他代表的意义是:我不是先有车才去生产轮胎,而是已经有了轮胎才去生产车。这样的划分也代表的是一种思维方式,让你的所有对象之间从思维与实现上解耦。这样一来我的对象才是真正的独立。所以解决你肯定遇到了的一个困惑:XML是一个非常累人的依赖注入实现方式而已,依赖注入其实还有其他实现,例如注解的方式。

第三步,依赖注入是一个好的思想,但是优势在什么地方呢?解耦在什么地方呢?

继续沿用上面的造车的例子。造车,调用车轮,调用外胎,调用橡胶。我刚造好一辆车,现在我们需要把车轮换成另外一个车轮。这样一来,依赖注入的优势就体现出来了,因为你只需要替换掉调用车轮的车轮对象即可。

三步下来,依赖注入的优势就出来了。特别是当团队合作的时候,他完全可以不用理解造车轮的细节就可以完好的换掉车轮对象。现在你大概了解了什么叫做依赖注入,在spring实战中,作者也强烈推荐用注解方式来操作spring。希望本文能帮助到各位。

软件设计模式—依赖注入相关推荐

  1. 依赖注入[2]: 基于IoC的设计模式

    正如我们在<控制反转>提到过的,很多人将IoC理解为一种"面向对象的设计模式",实际上IoC自身不仅与面向对象没有必然的联系,它也算不上是一种设计模式.一般来讲,设计模 ...

  2. 依赖注入[5]: 创建一个简易版的DI框架[下篇]

    为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在<依赖注入[4]: 创建一个简易版的DI框架[上篇]> ...

  3. python依赖注入_什么是依赖注入?

    这篇文章是关于一般依赖关系注入和在PHP中实现依赖注入容器系列的第一部分. 今天我不会谈论容器然而我想以一些具体的示例介绍依赖注入的概念希望说明尝试去解决问题和它给开发者带来的好处.如果你已经知道依赖 ...

  4. Golang 实现依赖注入

    Golang 实现依赖注入 什么是依赖注入 依赖注入就是将实例变量传入到一个对象中去 为何要做依赖注入 让开发者从对项目中大量依赖的创建和管理中解脱出来 控制反转(IoC)与依赖注入(DI) 控制反转 ...

  5. 设计模式之控制反转和依赖注入的使用小结

    控制反转 控制反转是一种思想,Inversion of Control,缩写为IoC,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.参考 为什么要用控制反转的思想 主要是为了高内 ...

  6. 身边的设计模式(三):抽象工厂 与 依赖注入

    上篇文章,我们说到了简单工厂和工厂方法,如果没看过的,请先看上篇,不然的话,可能有些吃力,或者直接点击阅读原文,查看我博客园的对应详细版的文章. 大家学到了这里,我建议自己可以练习练习,可以写一下部分 ...

  7. Java依赖注入 - DI设计模式示例教程

    Java依赖注入 - DI设计模式示例教程 Java依赖注入 设计模式允许我们删除硬编码的依赖项,并使我们的应用程序松散耦合,可扩展和可维护.我们可以在java中实现依赖注入,以将依赖项解析从编译时移 ...

  8. 依赖注入(di)模式_Java依赖注入– DI设计模式示例教程

    依赖注入(di)模式 Java Dependency Injection design pattern allows us to remove the hard-coded dependencies ...

  9. 设计模式--谈谈IoC、DI、DIP、IoC Container、控制反转与依赖注入

    1. 介绍 控制反转(IoC).依赖反转原理(DIP).依赖注入(DI)和IoC容器这些术语你都清楚嘛? 2. 概念讲解 2.1. IoC 控制反转(IoC):是一种设计模式,用于在面向对象的设计中反 ...

最新文章

  1. Python jquery标签云
  2. golang mysql 事务_golang的嵌套事务管理-Go语言中文社区
  3. 实验三——for 语句及分支结构else-if
  4. 玩转HTML5移动页面
  5. “2020 RT-Thread开发者大会” 思考感悟
  6. JS+CSS打造随屏幕滚动的quick快速导航代码
  7. Spark源码分析之BlockManagerMaster
  8. 周获 4700 Star 全球疫情数据可视化系统,超轻量级中文 OCR……GitHub 一周热点速览...
  9. CF984D XOR-pyramid
  10. 北京化工大学研究生学堂在线矩阵论及其应用答案
  11. exec还原oracle,symantec Backup exec 恢复Recovery Oracle 数据库
  12. VISIO2016的安装报错
  13. 形容等待时间长的句子_形容等待的句子
  14. 特教学校计算机课,特教学校引入编程课 为听障孩子打开智能之门
  15. (十)苏世民:我的经验和教训:掌控(1~6)
  16. 服务器怎么使用无线网卡,无线上网卡怎么用
  17. 深入浅出Java反射原理和使用场景
  18. KMSpico无法安装问题解决
  19. 【CUDA】安装CUDA
  20. PostgreSQL-事务与commit优化

热门文章

  1. 利用C#进行Socket通信编程之二:一个实例
  2. C# 类的几种方法调用
  3. 【译】RAID的概念和RAID对于SQL性能的影响
  4. springboot actuator监控笔记
  5. restful规范和APIView
  6. D04——C语言基础学PYTHON
  7. 第46条:不要使用 dispatch_get_current_queue
  8. 浏览器json格式化插件 yformater
  9. jQuery的preventDefault()
  10. 最短路---dijsktra--邻接矩阵