您的位置:首页 > 其它

Scala中Dependency Injection

2015-07-19 23:35 190 查看
依赖注入是指 依赖对象的创建,由第三方完成,而不是被依赖对象,我们将这种控制关系的转移,称为依赖注入或者控制反转。

在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: