启动播放应用程序时代码的入口点
Entry point of the code when starting a play application
这是我编写的第一个 Web 应用程序,所以也许这个问题对你们中的一些人来说很明显,但我没有在 play 网站上找到任何东西。查看入门应用程序时,代码的一部分如下所示:
package controllers
import javax.inject._
import play.api._
import play.api.mvc._
@Singleton
class HomeController @Inject()(val controllerComponents: ControllerComponents) extends BaseController {
def index() = Action { implicit request: Request[AnyContent] =>
Ok(views.html.index())
}
}
所以,现在我想知道,我的 controllerComponents
是从哪里来的?我的申请从哪里开始?通常,我可以寻找我的 main
方法或 extends App
但在这里我真的不知道这个方法在哪里或在起作用,一般来说,我从中获得我的价值。
简短的回答 - Play Framework 应用程序中没有公开 main
方法。它对开发人员是隐藏的,因此框架会为您完成所有应用程序启动工作:依赖注入连接、外部资源创建(例如 slick
或其他可插入资源的数据库连接)、端口监听启动等。这种方法也为人所知作为 Hollywood principle:
Don't call us, we will call you
如果您需要控制应用程序生命周期,也许接下来的操作会对您有所帮助:https://www.playframework.com/documentation/latest/api/scala/play/api/inject/ApplicationLifecycle.html
此外,如果您想更精确地控制应用程序加载过程,您可能需要创建自己的 ApplicationLoader
,如本节所述:https://www.playframework.com/documentation/latest/api/scala/play/api/inject/ApplicationLifecycle.html
这是我编写的第一个 Web 应用程序,所以也许这个问题对你们中的一些人来说很明显,但我没有在 play 网站上找到任何东西。查看入门应用程序时,代码的一部分如下所示:
package controllers
import javax.inject._
import play.api._
import play.api.mvc._
@Singleton
class HomeController @Inject()(val controllerComponents: ControllerComponents) extends BaseController {
def index() = Action { implicit request: Request[AnyContent] =>
Ok(views.html.index())
}
}
所以,现在我想知道,我的 controllerComponents
是从哪里来的?我的申请从哪里开始?通常,我可以寻找我的 main
方法或 extends App
但在这里我真的不知道这个方法在哪里或在起作用,一般来说,我从中获得我的价值。
简短的回答 - Play Framework 应用程序中没有公开 main
方法。它对开发人员是隐藏的,因此框架会为您完成所有应用程序启动工作:依赖注入连接、外部资源创建(例如 slick
或其他可插入资源的数据库连接)、端口监听启动等。这种方法也为人所知作为 Hollywood principle:
Don't call us, we will call you
如果您需要控制应用程序生命周期,也许接下来的操作会对您有所帮助:https://www.playframework.com/documentation/latest/api/scala/play/api/inject/ApplicationLifecycle.html
此外,如果您想更精确地控制应用程序加载过程,您可能需要创建自己的 ApplicationLoader
,如本节所述:https://www.playframework.com/documentation/latest/api/scala/play/api/inject/ApplicationLifecycle.html