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。

  • 相关阅读:
    TSql随机获取一条
    Delphi 删除目录
    Sqlserver 分组累加(处理一分一段表)
    当上班没事做的时候,做什么?
    网站中图片滚动效果的实现方法集锦
    Gridview用法大全。
    开发常见问题总结(二)
    仿京东,qq相册效果的前台和后台实现的开发总结。
    分享一款不错多个图片上传工具
    开发常见问题总结(三)
  • 原文地址:https://www.cnblogs.com/AllanDragoon/p/2992426.html
Copyright © 2011-2022 走看看