• 依赖注入


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

    以一个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。

  • 相关阅读:
    Bootstrap--模仿官网写一个页面
    【ASP.NET基础】客户端、服务器端的数据验证 + CKEditer
    初识--Ajax & Json
    ASP.NET 状态的传递和保存
    启动项目报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadT
    Oracle数据库导不进去
    Tomcat一闪就退
    Oracle提示已连接到空闲的实例
    创建数据库表空间
    cmd命令导入.dmp文件
  • 原文地址:https://www.cnblogs.com/qsort/p/2172283.html
Copyright © 2020-2023  润新知