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。

  • 相关阅读:
    C# FTP功能实现(转载)
    Invoke和BeginInvoke的使用(转载)
    .NET中各种数据库连接大全(转载)
    最近关注的网络资料(书签)
    SQL语句总结(转载)
    线程池和定时器——多线程的自动管理(转载)
    C#程序安装部署(转载)
    TcpClient.Connect函数连接超时的问题(转载)
    C# 各种定时器比较(转载)
    SQL SERVER中对日期字段(datetime)比较(转载)
  • 原文地址:https://www.cnblogs.com/qsort/p/2172283.html
Copyright © 2011-2022 走看看