Scala中Dependency Injection

来源:互联网 发布:java.util. 无法引入 编辑:程序博客网 时间:2024/06/13 22:35

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

在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

0 0
原创粉丝点击