Scala中Dependency Injection

依赖注入是指 依赖对象的创建,由第三方完成,而不是被依赖对象,我们将这种控制关系的转移,称为依赖注入或者控制反转。

在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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值