zoukankan      html  css  js  c++  java
  • 依赖注入

    依赖注入解决的是依赖对象的创建与管理,更准确来说,是“依赖关系”的管理。

    以一个Coder类和一个Computer类为例,代码民工总归是要有电脑才能工作的嘛,所以Coder对象要包含一个Computer对象,即Coder类对Computer类产生依赖了。

    最原始的情况下,可能是类似下面这样的代码,依赖关系硬编码到代码中

    Coder qsort = new Coder("qsort", new Computer("Dell Optiplex 990"));

    硬编码带来的当然是灵活性的降低和可维护性的下降,使得Coder和Computer这两个concrete class有了硬依赖。更好的做法是将Computer类提取出一个行为接口,给出多种实现,和一个factory来按需创建对象,如下

    Coder qsort = new Coder("qsort", ComputerFactory.getInstance("Dell Optiplex 990"));

    但这仍然在代码上有所依赖。

    本质上,上面两种情况中的依赖关系是由qsort主动建立的(通过ctor),factory只是将对象的创建由qsort移到了factory,依赖关系的建立仍然是由Coder完成。

    而所谓“依赖注入”,则是将这种依赖关系的建立提到更高的层面,通过framework等来建立。具体来说,Coder通过某种方式指定自己对Computer类的依赖(例如通过外部配置文件),之后,Coder对Computer的依赖关系的建立将由外部framework根据配置文件指定的依赖来自动帮其建立,Coder无须主动去管理自己的依赖关系。由于这种依赖关系的建立是由外部注入到Coder类中的,所以称之为“依赖注入”。

    依赖注入实现的是“控制翻转(Inversion of Control)”,Java圈儿就是喜欢玩概念,各种各样的名词。

    Dependency Injection的实现可以有多种方式,参见http://en.wikipedia.org/wiki/Inversion_of_control

    Spring框架实现的是setter injection和ctor injection。

  • 相关阅读:
    转发 微博 Qzone 微信 草根创业英雄时代落幕:贾跃亭戴威们一去不复返
    python 发送大Json格式数据
    python post json数据
    python post 参数
    IntelliJ Idea 常用10款插件(提高开发效率)
    IDEA操作技巧:一些常用且实用的插件
    nacos
    Sentinel 与 Hystrix 的对比
    阿里启动新项目:Nacos,比 Eureka 更强!
    D3.js学习(一)
  • 原文地址:https://www.cnblogs.com/qsort/p/2172283.html
Copyright © 2011-2022 走看看