加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Boot.scala在哪里适用?

发布时间:2020-12-16 10:03:29 所属栏目:安全 来源:网络整理
导读:我不时会看到有一个boot. scala或Boot. scala文件的项目.虽然这似乎不是一个硬的快速 Scala规则,但它似乎是包含Boot.scala文件的民间传说.一些项目.这个特定项目使用Akka和Spray,它转换为actor模式和REST服务. 有人请说明在这样的文件中通常可以预期的功能类
我不时会看到有一个boot. scala或Boot. scala文件的项目.虽然这似乎不是一个硬的快速 Scala规则,但它似乎是包含Boot.scala文件的民间传说.一些项目.这个特定项目使用Akka和Spray,它转换为actor模式和REST服务.

有人请说明在这样的文件中通常可以预期的功能类型,以及这是一种常见的排序模式吗?

作为这个问题的扩展(请先回答第一位:-),我将非常感谢知道如何阅读此代码,该代码位于具有多个Boot.scala文件的项目中.

Web包中的Boot.scala:

trait Web {
  this: Api with Core =>
....
}

api包中的Boot.scala:

trait Api {
  this: Core =>
....
}

核心包中的Boot.scala:

trait Core {
  implicit def actorSystem: ActorSystem
  implicit val timeout = Timeout(30000)

  val application = actorSystem.actorOf(
    props = Props[ApplicationActor],name = "application"
  )

  Await.ready(application ? Start(),timeout.duration)

}

可以认为一个包依赖于另一个包,并且Boot.scala文件可能是基于actor的系统中的常见视图,但是如何“读取”关系呢?例如,我如何用英语阅读trait Web {this:Api with Core => …}?

在特定实例中,应用程序的起点位于主文件中:

object Main extends App {
  implicit val system = ActorSystem("RESTService")

  class Application(val actorSystem: ActorSystem) extends Core with Api with Web {

  }

  new Application(system)

  sys.addShutdownHook {
    system.shutdown()
  }

}

我意识到我的问题对某些人来说似乎微不足道,但我想在这里进入Scala部落,并且“秘密密码”不在任何手册中.

解决方法

我不知道Boot.scala是否是一种常见的模式,但它在Lift中使用并包含应用程序的主要配置.由于Lift相当陈旧(相对于其他scala项目),它可能已经设置了一个约定.

对于另一个问题,您应该阅读cake pattern和self types.例如

trait Web {
  this: Api with Core =>
....
}

定义一个特征Web,它只能混合到从API和Core继承的类或特征中,或者将它们作为其自身类型的一部分.从而

class Application(val actorSystem: ActorSystem) extends Core with Api with Web {

}

如果没有混合Api特征,则不会键入检查,因为Web特征需要它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读