依赖注入揭秘
来源:互联网 发布:王侯将相宁有种乎 编辑:程序博客网 时间:2024/06/01 09:14
简短的版本:
依赖注入意味着给一个对象它的实例变量赋值。
稍微长一点的版本,依赖没有注入:
类中有一些方法调用时使用的东西,我们叫这是是“依赖”,大多数人称之为“变量”,有时称之为“实例变量”。
public class Example { <span style="background-color: rgb(255, 255, 153);">private DatabaseThingie myDatabase; </span> public Example() { <span style="background-color: rgb(255, 255, 153);"> myDatabase = new DatabaseThingie(); </span> } public void DoStuff() { ... <span style="background-color: rgb(255, 255, 153);">myDatabase.GetData(); </span> ... } }
这里我们有一个变量或者是依赖,叫做myDatabase,我们在构造函数中初始化它。
稍微长一点的版本,依赖注入:
如果我们想,我们可以将变量传到构造函数中,那就是“注入”这个“依赖”到类中,现在当我们使用这个变量(依赖)时候,我们用的这个变量是给的而不是我们创建的。
public class Example { private DatabaseThingie myDatabase; public Example() { myDatabase = new DatabaseThingie(); } <span style="background-color: rgb(255, 255, 153);"> public Example(DatabaseThingie useThisDatabaseInstead) { myDatabase = useThisDatabaseInstead; }</span> public void DoStuff() { ... myDatabase.GetData(); ... } }
全部的东西都在这了,剩下的变量就成主角了,你可以在setter方法中设置依赖,你可以通过调用定义在特殊接口中的setter方法设置依赖等等。
稍微长一点的版本,为什么要这么做:
在测试时,隔离这些方法很方便
public class ExampleTest { TestDoStuff() { MockDatabase mockDatabase = new MockDatabase(); // MockDatabase is a subclass of DatabaseThingie, so we can // "inject" it here: Example example = new Example(mockDatabase); example.DoStuff(); mockDatabase.AssertGetDataWasCalled(); } }public class Example { private DatabaseThingie myDatabase; public Example() { myDatabase = new DatabaseThingie(); } public Example(DatabaseThingie useThisDatabaseInstead) { myDatabase = useThisDatabaseInstead; } public void DoStuff() { ... myDatabase.GetData(); ... } }
依赖注入实际上就是传递实体变量。
还有两篇好文章:
Inversion of Control Containers and the Dependency Injection pattern:http://www.martinfowler.com/articles/injection.html
A beginners guide to Dependency Injection:http://www.theserverside.com/news/1321158/A-beginners-guide-to-Dependency-Injection
原文链接:http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html
2 0
- 依赖注入揭秘
- Spring揭秘(七)——基于注解的依赖注入
- Spring揭秘(八)——基于注解的依赖注入2
- Spring揭秘(九)——基于注解的依赖注入3
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 依赖注入
- 技术博客记录
- 利用网卡地址和OpenUDID,实现获取设备唯一标识的一种方案
- ORA-12170: TNS: 连接超时解决方法(10g、11g都可用)
- java动态代理(JDK和cglib)
- 对称矩阵的压缩存储及基本运算(3)
- 依赖注入揭秘
- UML类图几种关系的总结
- Intent传递对象的两种方法
- iOS中另外一种多线程实现方式NSOperation
- 嵌入式开发人才的未来发展方向
- Python 2.7 mysql-python(MySQLdb) win7 64bit 扩展安装
- GCC常用参数
- 百度手机卫士,简单粗暴至极(关于Stagefright高危漏洞)
- java ftp操作