学习DI--第一篇
来源:互联网 发布:apache基金会如何赚钱 编辑:程序博客网 时间:2024/06/05 01:21
解耦
高度耦合
// 构造器内public Knight(){ this.quest = new SomeQuest();}
解耦
public Knight(Quest quest){ // 不与固定的quest绑定 任何implement了Quest的实体都可以被关联 this.quest = quest;}
使用Mock测试解耦
import static org.mockito.Mockito.*;//一种新的导入方式,添加static只导入静态的方法,不加则导入所有的方法,可以在文件中不加"类名."直接使用方法名即可@Testpublic 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).out}"/> </bean>
新特性–通过class文件配置config
import ...Knight;import ...Quest;import ...SomeQuest;@Configurationpublic class knightConfig{ @Bean public Knight Knight(){ // 注意此处调用的方法 return new BraveKnight(quest()); } // 构建 Quest bean @Bean public Quest quest(){ return new SomeQuest(System.out); }}
0 0
- 学习DI--第一篇
- servlet学习(第一篇)
- 多线程学习第一篇
- 第一篇学习日记
- 第一篇PHP学习
- android 学习第一篇
- wordpress 学习第一篇
- 学习android第一篇
- Linux学习第一篇
- Linux学习第一篇
- android学习第一篇
- lucene学习第一篇
- latex学习第一篇
- 学习JBPM-第一篇
- C++学习第一篇
- maven 学习第一篇
- java 学习第一篇
- Qt 学习第一篇
- Bootstrap-treeview使用API
- Java中的Abstract Class与Interface
- 主方法求解递归式
- POJ 2823 (从经典滑动窗口最大值问题入门单调队列)
- Android本机号码手机与提交方案
- 学习DI--第一篇
- 【HTML5】图像阴影
- C字符和字符串
- unresolved external symbol __imp__... when I want to link a static library
- 1.配置前后端框架
- 记一次库级别的拆分
- npm运行报错Error: EEXIST: file already exists解决办法
- 如何下载 Youtube 视频的字幕?
- 1030. 完美数列(25)