Scala中Dependency Injection
2015-07-19 23:35
190 查看
依赖注入是指 依赖对象的创建,由第三方完成,而不是被依赖对象,我们将这种控制关系的转移,称为依赖注入或者控制反转。
在spring 的ioc 就是经典的案例。通过配置文件和反射机制,将依赖对象的创建交给spring 容器来完成。spring 的ioc 优缺点:
优点: 可插拔
缺点:
(1)生成一个对象的步骤变复杂了
(2)对象生成因为是使用反射编程,在效率上有些损耗
(3)缺少IDE重构操作的支持
scala 的 Dependency Injection 利用scala 的self type 的语法,变得非常优雅.
请参考如下代码
从上看出,trait Auth 依赖于 trait Logger 对象 ,最后 通过object DI 实现
参考资料
1. 土豆网 第57讲:Scala中Dependency Injection实战详解
2. 百度云盘 第57讲:Scala中Dependency Injection实战详解
另外
欢迎广大Spark爱好者学习交流.也欢迎广大学习爱好者加入
DT大数据梦工厂交流群:462923555
DT大数据微信公众账号:DT_Spark
在spring 的ioc 就是经典的案例。通过配置文件和反射机制,将依赖对象的创建交给spring 容器来完成。spring 的ioc 优缺点:
优点: 可插拔
缺点:
(1)生成一个对象的步骤变复杂了
(2)对象生成因为是使用反射编程,在效率上有些损耗
(3)缺少IDE重构操作的支持
scala 的 Dependency Injection 利用scala 的self type 的语法,变得非常优雅.
请参考如下代码
/** * 依赖注入 * 利用scala self type 功能 * Created by zhiwang on 2015/7/19. */ trait Logger{ def log(msg:String) } trait Auth{ auth:Logger => //self type def act(msg:String): Unit ={ log(msg) //调用被依赖的对象Logger 的log 方法 } } object DI extends Auth with Logger{ override def log(msg:String): Unit ={ println(msg) } } object Dependency_Injection { def main(args: Array[String]) { DI.log("dependency injection") //DI为静态对象 } }
从上看出,trait Auth 依赖于 trait Logger 对象 ,最后 通过object DI 实现
参考资料
1. 土豆网 第57讲:Scala中Dependency Injection实战详解
2. 百度云盘 第57讲:Scala中Dependency Injection实战详解
另外
欢迎广大Spark爱好者学习交流.也欢迎广大学习爱好者加入
DT大数据梦工厂交流群:462923555
DT大数据微信公众账号:DT_Spark
相关文章推荐
- linux挂载mount参数优化
- Binary Tree Level Order Traversal II
- cacti安装记录 第三阶段 Cacti及相关插件的安装 复盘
- 工作总结
- Linux进程间通信——使用信号
- xml之phpdom操作
- HDU3368 Reversi
- json数据在前端和php后端处理注意事项
- Linux进程间通信——信号集函数
- 环境变量
- Lab - Pandora's Box
- Maximum Depth of Binary Tree
- POJ1405Heritage
- javalock锁的机制
- Linux进程间通信——使用匿名管道
- C#高级编程四十二天----委托和事件
- 【动效设计】常见动效设计分门别类
- HDU3363 Ice-sugar Gourd
- Minimum Depth of Binary Tree
- 查找数据库表的数量