use*_*470 9 controller playframework
我刚刚开始,我不认为我理解得很好.据我所知,所有控制器都是在创建路由器时创建的依赖项.然后它们继续运行,直到应用程序终止时路由器终止.如果是这种情况,则宣称它们似乎是多余的.
Jac*_*cko 12
摆脱全局状态(这违背了无状态设计的想法)播放引入DI(我认为在v2.4左右)和v2.5中它现在默认使用注入路由器.Google Guice是Play打包的默认DI框架(您可以使用其他框架,但Guice是默认设置).
现在(总的来说)Guice认为创建Controller的新实例比使用单例更快,更安全 - 请参阅Guice文档了解更多信息.
如果您需要将控制器的实例限制为仅1,那么您可以将其标记为单例,但必须使其成为线程安全的,因为它将在线程之间共享.
我认为Activator模板可以使用更多的文档来解释为什么它们似乎@Singleton在它们似乎不需要时会生成控制器,因为它令人困惑.HomeController(例如,在Play-Scala种子中)@Singleton当它没有表现出任何情况时,会引起混淆.
一般情况下,@Singleton除非您对不变性和线程安全性有一个公平的理解,否则最好不要使用.如果你认为你有一个Singleton的用例,只是确保你保护任何共享状态.
简而言之,不要使用@Singleton.
| 归档时间: |
|
| 查看次数: |
1935 次 |
| 最近记录: |