scala中可以通过依赖注入实现通过内部类无法做到的事情,或者是更加灵活的进行某些操作。

依赖注入实际上相当于依赖路径的引入,而在写法上更加的灵活(阅读性并不是很强--个人感觉)。

 


package main.scala.S_01_LIANTEST.Test1

/**
  * Created by Postbird on 2016/9/26.
  */
trait Logger{
    def log(msg:String)
}
trait Server{
    s:Logger=>{
        //在这里限定了 s必须实现Logger
        //将Logger注入到server中后,就可以直接使用logger的相关属性和方法
        def serverLog(msg:String): Unit ={
            log(msg)
        }
    }
}
//object ApacheServerError extends Server{}
//如果仅仅是混入 Server , 报错误
object ApacheServer extends Server with Logger{
    //必须同时混入 Server 和 Logger
    //必须对Logger的log进行覆写或者是实现
    override def log(msg: String): Unit = {
        println(msg)
    }
}
object Test2 extends App{
    ApacheServer.log("started on 2016-9-26")
    //started on 2016-9-26
}