依赖注入(injection)是一种对任何编程语言都有效的概念。依赖注入背后的一般概念称为控制反转。根据这个概念,类不应该静态配置其依赖项,而应该从外部配置。

如果Java类使用此类的实例,则Java类依赖于另一个类。我们称之为_class依赖。例如,访问记录器服务的类依赖于此服务类。

理想情况下,Java类应尽可能独立于其他Java类。这增加了重用这些类的可能性,并且能够独立于其他类测试它们。

如果Java类通过new运算符创建另一个类的实例,则不能独立于此类使用(和测试),这称为硬依赖。以下示例显示了一个没有硬依赖关系的类。

package com.vogella.tasks.ui.parts;

import java.util.logging.Logger;

public class MyClass {

    private Logger logger;

    public MyClass(Logger logger) {
this.logger = logger;
// write an info log message
logger.info("This is a log message.")
}
}
  请注意,这个类只是一个普通的Java类,没有什么特别之处,除了避免直接创建对象。

框架类(通常称为依赖容器)可以分析此类的依赖关系。通过此分析,它可以创建类的实例,并通过Java反射将对象注入定义的依赖项中。

这样,Java类没有硬依赖关系,这意味着它不依赖于某个类的实例。这允许您单独测试您的类,例如通过使用模拟对象。

模拟对象(模拟)是与真实对象相似的对象。但这些嘲笑没有编程; 它们被配置为以某种预定义的方式运行。模拟是一个英语单词,意思是模仿或模仿。

如果使用依赖注入,则可以单独测试Java类。

Injection的简单辨析的更多相关文章

  1. CWnd与HWND的简单辨析

    今天在写一个小的网络应用,需要用到HWND类型的一个参数.而程序中有的“窗口操作句柄”只有一个CWnd类型的指针.这俩不都是“窗口句柄”么?而且反正都是地址直接转换使用如何?结果出现了调用失效的情况. ...

  2. URL和URI简单辨析

    URI 全称为 Universal Resource Identifier,统一资源标识符,用来唯一的标识一个资源. URL 全称为Universal Resource Locator,统一资源定位器 ...

  3. C语言工具的简单辨析

  4. .NET手记-Autofac进阶(属性和方法注入 Property and Method Injection)

    尽管构造函数参数注入是传递参数值给当前构造的组件的优先方式,但是你也可以使用属性或者方法注入来提供参数值. 属性注入使用可写入的变量而不是构造函数参数来完成注入.方法注入则通过方法来设置依赖项. 属性 ...

  5. NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇

    背景 NanoProfiler是一个EF Learning Labs出品的免费性能监控类库(即将开源).它的思想和使用方式类似于MiniProfiler的.但是,设计理念有较大差异. MiniProf ...

  6. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  7. MvvmLight框架使用入门(一)

    MvvmLight是比较流行的MVVM框架,相对较为简单易用.可能正因为简单,对应的帮助文档不多,对初学者就不够友好了.这里会用几篇随笔,就个人对MvvmLight的使用经验,来做一个入门的介绍. 第 ...

  8. 常见的7种XSS

    1. URL Reflection 当URL以某种方式反映在源代码中时,我们可以添加自己的XSS向量/有效负载.对于PHP页面,可以使用斜杠字符(/)在页面名称之后添加任何内容 http://brut ...

  9. 20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践

    20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访 ...

随机推荐

  1. 下载Crypto,CyCrypto,PyCryptodome 报错问题

    python下载Crypto,CyCrypto,PyCryptodome,如有site-packages中存在crypto.pycrypto,在pip之前,需要pip3 uninstall crypt ...

  2. cf 1110 D

    哇真难啊,没注意到 可以开 dp[N][3][3]这种性质,也就是三个相同的顺子可以变成三个刻子,所以我们维护顺子的数目就不用超过三了,又因为每张牌i,只会被i-1,i-2,影响,所以额外开两维记录( ...

  3. java第一次上机实验--验证码

    package javashiyan; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event. ...

  4. web开发——入门篇(上)

    作为一名IT届的后生,当初也经历过懵懂无知的实习期,对那种无力感深有体会.在这,希望能用我这几年的开发经验,让各位即将踏入或者刚刚踏入web开发领域的新人们少走些弯路.鉴于这是入门篇,下面我就从零为大 ...

  5. json转换学习

    文章部分代码实体类可以忽略. 原文:https://www.cnblogs.com/free-dom/p/5801866.html 代码如下: package covert; import java. ...

  6. git push fatal: The remote end hung up unexpectedly

    git push fatal: The remote end hung up unexpectedly git config http.postBuffer git gc --aggressive 不 ...

  7. Android 学习书籍下载

    链接:https://pan.baidu.com/s/1Y6LHLJlYDfbNjoMAVjfjMw               密码:ywbk 链接:https://pan.baidu.com/s/ ...

  8. Android 四大布局属性介绍

    线性布局 控件距离布局底,左,右,顶部部的距离 android:paddingBottom="35.0dip"          android:paddingLeft=" ...

  9. iota

    这算法由SGI专属,并不在STL标准之列.它用来设定某个区间的内容,使其内的每一个元素从指定的value值开始,呈现递增状态.它改变了区间内容,所以是一种质变算法. template <clas ...

  10. 脚本一键部署lnmp

    [root@ycj ~]# wget -c http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz && tar zxf lnmp1.1-full ...