Java中解耦测试分析
【1】首先我们来了解下,什么叫做耦合
耦合:指的是程序之间的依赖关系{包括类之间的依赖和方法间的依赖}
例如,我们常用的new 就是一种耦合,以及一个类调用另一个类中的方法,也是耦合
【2】解耦
解耦:就是降低程序之间的耦合关系,但是并不能消除
在实际的开发中:我们应该做到编译器不依赖,运行期依赖
【3】解决思路
1.使用反射来创建对象,避免使用new关键字
2.通过读取配置文件来获取要创建的对象的全限定类名
我们先创建出一个bean.properties配置文件,以后在Spring中是要用到xml的,这里是测试,所以用properties。
在这里面写上,两个实现类的全限定类名。
因为我们需要进行在类中调用实体类,把new关键字消除的操作。
就需要实例化对象
在工厂类中,我们需要先读取我们的bean.properties文件,然后用load方法读取加载
之后就是实例化我们的实现类对象的代码
这里最重要的一点就是Class.forName的用法,这个方法是返回一个类,然后再 Class.newInstance创建对象,来代替创建对象时的new关键字。
注意:forName中的字符串,必须包含我们所需要创建类的包名和类名
也就是我们bean.properties中写的
这样我们就得到了我们需要的实体类对象
我们返回到我们的service实体类中
同理,我们最后的前端模拟类也可以这么使用
注意:因为我们在工厂中getBean方法中返回的是Object类型,这个都需要强转
这里大家需要知道,这个靠newInstance出来的对象,每次打印的地址值都不同,所以是多例的,如果我们想得到单例的对象,怎么办?
既然我们调用BeanFactory的方法时,每次都是新的对象,那么我们就可以在工厂中,把对象存入到一个容器中,然后每次调用,就从容器中拿就可以了。
这样我们在自定义方法中,就可以,return beans.get(name);即可
Java中解耦测试分析相关推荐
- 深入理解Java中的逃逸分析
转载自 深入理解Java中的逃逸分析 在Java的编译体系中,一个Java的源代码文件变成计算机可执行的机器指令的过程中,需要经过两段编译,第一段是把.java文件转换成.class文件.第二段编译 ...
- Java - 深入理解Java中的逃逸分析
在Java的编译体系中,一个Java的源代码文件变成计算机可执行的机器指令的过程中,需要经过两段编译,第一段是把.java文件转换成.class文件.第二段编译是把.class转换成机器指令的过程. ...
- Java中的内存分析
分析内存是深入了解编程的第一步,以下来演示一下编程中常见的内存分析,文章脉络: 数据类型 数据类型不同,内存分配位置和大小也不同,用一张图表示Java中的数据类型.除了基本数据类型,其它全部是引用类型 ...
- JAVA中的编码分析
在实际编程中可以不用关注JVM中使用的是什么编码,而只需要关注自己输出需要采用的编码,JVM会根据你设置的编码正确操作. 1.String采用的是什么编码? 很多厂家根据规范实现了JVM,JVM只说明 ...
- java中ssh测试接口方法_SSH入门---框架搭建(eclipse环境下)
前情提要:本文是把Spring.Struts2.Hibernate三大框架整合到一起,搭建整合框架的教程,如需查看各个框架的单独搭建,请看我个人的相关文章. 一.新建动态web项目,导包: 我的项目名 ...
- Java 中 ConcurrentHashMap 原理分析
一.Java并发基础 当一个对象或变量可以被多个线程共享的时候,就有可能使得程序的逻辑出现问题. 在一个对象中有一个变量i=0,有两个线程A,B都想对i加1,这个时候便有问题显现出来,关键就是对i加1 ...
- java中assertEquals_Junit 测试: assertEquals的使用
我写了如下的一个类:importjava.math.BigDecimal;publicclassDecimalClass{publicBigDecimaladdFloat(floatf1,floatf ...
- tlab java_Java中的逃逸分析和TLAB以及Java对象分配
我们在学习使用Java的过程中,一般认为new出来的对象都是被分配在堆上,但是这个结论不是那么的绝对,通过对Java对象分配的过程分析,可以知道有两个地方会导致Java中new出来的对象并一定分别在所 ...
- Java中对象都是分配在堆上吗?你错了!
我们在学习使用Java的过程中,一般认为new出来的对象都是被分配在堆上,但是这个结论不是那么的绝对,通过对Java对象分配的过程分析,可以知道有两个地方会导致Java中new出来的对象并不一定分别在 ...
最新文章
- 大数据标准化白皮书正式发布
- SQL Server开发人员应聘常见问题妙解
- 服务器双系统设置默认,服务器双系统怎么选择
- Java内存模型FAQ(四)重排序意味着什么?
- Jquery 日期组件
- qtcreator下拉列表怎么制作_设置EXCEL动态下拉菜单,只需要一个组合键,新手也能快速掌握...
- 数据结构HashMap(Android SparseArray 和ArrayMap)
- IDEA设置注释配置时获取不到参数的解决办法
- 万字长文!Go 后台项目架构思考与重构
- Java打卡Day4-算术运算符
- 基于Docker的Mysql主从复制
- 使用javap分析Java的字符串操作 1
- VS201x提示无法查找或打开 PDB 文件
- 机器学习 - 训练集、验证集、测试集
- Word文档的使用技巧
- win10 2016 长期服务版激活
- Git 笔记 - git rebase
- 倒排索引(Inverted index)
- github出现HTTP request failed
- 3D立方体图片切换动画