zoukankan      html  css  js  c++  java
  • Dependency Injection

    以下内容翻译自这篇文章http://www.vogella.com/articles/DependencyInjection/article.html

    依赖注入(Dependency Injection)的思想来源于控制反转(Inversion of Control) ,也就是说, 一个类不应该自己去决定它依赖于谁,而应该由外部程序来配置。

    依赖到定义是,如果A类用了B类的实例,那么A对B有依赖。

    程序中最理想的状况是一个类要尽可能的独立于其他的类,这样才能增加使用这些类的可能性,以及单独测试它们的可能性。如果一个类内直接用new创建另外一个类的实例,那么它就不能独立的被使用和测试。

    应该从外部来解耦一个类和它到依赖。比如下面例子中一个Java类简单的定义了它的需求:

    • public class MyPart { @Inject private Logger logger; // DatabaseAccessClass would talk to the DB @Inject private DatabaseAccessClass dao; @Inject public void init(Composite parent) { logger.info("UI will start to build"); Label label = new Label(parent, SWT.NONE); label.setText("Eclipse 4"); Text text = new Text(parent, SWT.NONE); text.setText(dao.getNumber()); } }

     另外一个类能够读取它的依赖,然后创建MyPart的实例,并向这个实例中“注入”它需要的依赖。注入依赖的过程可以通过Java的反射机制来完成。“另外一个类”称之为依赖容器(dependency container),它是一个框架类(framework class)。

    这种方式下MyPart类并没有规定什么硬性依赖(hard dependency),也就是说,它没有依赖于任何一个其他类的实例。如果你向测试这个类,你可以向它注入一个模拟对象(mock object)。

    模拟对象并不是真的对象,它们只是用来模拟真正对象到行为。

    依赖注入可以发生在:

    • 类的构造函数中(构造注入construction injection)
    • 类方法中(方法注入method injecion)
    • 类成员中(成员注入feild injection)

    依赖注入同样可以在静态成员中发生。

    你可以不用任何其他到框架来实现依赖注入,比如用构造函数,getter/setter方法就能实现。但是一个好的依赖注入框架能够简化类的初始化过程,并且提供正确到依赖对象。

    比较流行到依赖注入框架是Spring和Google Guice。

  • 相关阅读:
    isMemberOf与isKindOf的区别
    当你的工程出现了问题,在别的电脑上可以正常运行。你该怎么做。。
    iOS 声明属性关键字的总结
    UISegmentedControl方法与属性的总结
    UILabel与UIFont的用法和属性的一些总结
    UIActivityIndicatorView控件的属性和方法
    第四百六十一天 how can I 坚持
    《Java基础知识》Java集合(Collection)
    《Java基础知识》Java线程的概念
    《Java基础知识》Java断言
  • 原文地址:https://www.cnblogs.com/AllanDragoon/p/2992426.html
Copyright © 2011-2022 走看看