Injection的简单辨析
依赖注入(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的简单辨析的更多相关文章
- CWnd与HWND的简单辨析
今天在写一个小的网络应用,需要用到HWND类型的一个参数.而程序中有的“窗口操作句柄”只有一个CWnd类型的指针.这俩不都是“窗口句柄”么?而且反正都是地址直接转换使用如何?结果出现了调用失效的情况. ...
- URL和URI简单辨析
URI 全称为 Universal Resource Identifier,统一资源标识符,用来唯一的标识一个资源. URL 全称为Universal Resource Locator,统一资源定位器 ...
- C语言工具的简单辨析
- .NET手记-Autofac进阶(属性和方法注入 Property and Method Injection)
尽管构造函数参数注入是传递参数值给当前构造的组件的优先方式,但是你也可以使用属性或者方法注入来提供参数值. 属性注入使用可写入的变量而不是构造函数参数来完成注入.方法注入则通过方法来设置依赖项. 属性 ...
- NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇
背景 NanoProfiler是一个EF Learning Labs出品的免费性能监控类库(即将开源).它的思想和使用方式类似于MiniProfiler的.但是,设计理念有较大差异. MiniProf ...
- 理解 angular2 基础概念和结构 ----angular2系列(二)
前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...
- MvvmLight框架使用入门(一)
MvvmLight是比较流行的MVVM框架,相对较为简单易用.可能正因为简单,对应的帮助文档不多,对初学者就不够友好了.这里会用几篇随笔,就个人对MvvmLight的使用经验,来做一个入门的介绍. 第 ...
- 常见的7种XSS
1. URL Reflection 当URL以某种方式反映在源代码中时,我们可以添加自己的XSS向量/有效负载.对于PHP页面,可以使用斜杠字符(/)在页面名称之后添加任何内容 http://brut ...
- 20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践
20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访 ...
随机推荐
- springboot源码解读01
package org.springframework.web; @javax.servlet.annotation.HandlesTypes({org.springframework.web.Web ...
- R - Dividing 多重背包
来源poj1059 Marsha and Bill own a collection of marbles. They want to split the collection among thems ...
- vue2中使用transition
最终效果为 div元素从右向左出现, 然后从左向右消失. transition标签包裹要移动的元素: css 样式: 其中: 1: 为div元素显示时的状态 2: 为div元素移动的过程 (进入 ...
- react 使用 lazyload 懒加载图片
文档地址 index.html <script> (function(w, d) { var b = d.getElementsByTagName("body")[0] ...
- jquery 全选/取消全部
html /*主要按钮*/ <td><input type="checkbox" id="checkAllChange" /></ ...
- 关于0x3f3f3f3f
发现有人把无穷大设成0x3f3f3f3f,好像还真不是随便设的. 0x3f3f3f3f比10^9大一点,比一般数据范围大: 乘2之后比2147483467小,满足正无穷加正无穷还是正无穷: 每个字节都 ...
- GitHub 设置首页显示 404 There isn't a GitHub Pages site here.
问题如题! 能使用的必要条件是: 1.创建的仓库 Code 中 必须 有 README.md 文件,内容自定 2.设置模板在仓库中 Settings -->GitHub Pages --> ...
- 2019年3月8日A股百点暴跌行情思考
本人操作: [海通证券]:早盘挂单并撤单,盘中高位卖出,尾盘低位接回. 总结 - 正确:持股数量不变,成本降低. [信雅达]:早盘低开加仓,盘中高位卖出,跌后接回,尾盘跌停. 总结 - 正确:加仓, ...
- ZOJ 4060 - Flippy Sequence - [思维题][2018 ACM-ICPC Asia Qingdao Regional Problem C]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4060 题意: 给出两个 $0,1$ 字符串 $S,T$,现在你有 ...
- jmeter安装与环境变量配置
因jmeter是java开发的,要想运行java开发的程序,必须先下载JDK一.jdk 1.下载jdk jdk下载地址:https://www.oracle.com/technetwork/java ...