学习DI--第一篇
2016-12-01 00:20
176 查看
解耦
高度耦合
// 构造器内 public Knight(){ this.quest = new SomeQuest(); }
解耦
public Knight(Quest quest){ // 不与固定的quest绑定 任何implement了Quest的实体都可以被关联 this.quest = quest; }
使用Mock测试解耦
import static org.mockito.Mockito.*;//一种新的导入方式,添加static只导入静态的方法,不加则导入所有的方法,可以在文件中不加"类名."直接使用方法名即可 @Test public void testMock(){ Quest mockQuest = mock(Quest.class); Knight knightTest = new knight(mockQuest); knightTest.embarkQuest(); verify(mockQuest,times(1)).embark(); }
注入
mock的对象也需要获得一个属性呢?
// 如果Quest的某个实现类依赖某个属性,如何将该属性也关联到呢? public class SomeQuest implements Quest{ private PrintStream stream; public SomeQuest(PrintStream stream){ this.stream = stream; } public void embark(){ stream.print("it relay on a stream!") } }
通过XML配置构造器注入
<bean id="knight" class="org....*** Knight"> <constructor-arg ref="quest"/> </bean> <bean id="quest" class="org....*** Quest"> <constructor-arg value="#{T(System).o 92b4 ut}"/> </bean>
新特性–通过class文件配置config
import ...Knight; import ...Quest; import ...SomeQuest; @Configuration public class knightConfig{ @Bean public Knight Knight(){ // 注意此处调用的方法 return new BraveKnight(quest()); } // 构建 Quest bean @Bean public Quest quest(){ return new SomeQuest(System.out); } }
相关文章推荐
- 关于MFC学习的第一篇文章
- 第一篇学习笔记:《学习计划》
- 关于JDBC的学习总结,新手写的第一篇学习帖子
- Javascript入门学习第一篇 js基础第1/2页
- 我的美式口语——第一篇:跟郝彬(Victor)老师学习美式音标
- 设计模式学习小结——第一篇 原则和工厂的比较
- arm9学习第一篇(1)
- 【嵌入式Linux学习七步曲之第一篇 Linux主机开发环境】虚拟机下Linux和windows的文件共享――mount方式
- Javascript入门学习第一篇 js基础第1/2页
- servlet学习(第一篇)
- C++学习笔记第一篇(转)
- lalala~ 我的第一篇linux学习笔记_如何查看系统模块
- 第一篇,先激励一下自己,转载某黑客论坛上的经典学习文章
- Spring IOC 学习笔记(一) IoC和DI概述
- 【Rebol 学习笔记】第一篇:编写一个简单的 CGI 程序
- 第一篇报到来了,以后将陆续发最近的学习文章
- 在CSDN的第一篇,今天的VC6学习心得
- arm9学习第一篇(2)
- EXTJS学习系列提高篇:第一篇(转载)作者殷良胜,用EXT2.2+vs.2008.net+C#动态生成GridPanel
- 学习笔记第一篇之Delphi的默认窗体代码