我想知道在Java Play!Framework 2.2.x应用程序中使用非静态控制器时是否有任何明显的优势或劣势。
我通常使用似乎是Play!的默认模式的clasic静态控制器。
但每当我使用Guice时,我显然需要改变它,以便我可以注入各种服务。对于那些想知道如何完成的人(你在路径文件中的函数“path”前添加一个'@'):
GET /api/something/someofthat controllers.MyController.myStaticAction
GET /api/something/someother @controllers.MyController.myNonStaticAction
public class MyController extends Controller {
public static Result myStaticAction(){
return ok("This is not a method.");
}
public Result myNonStaticAction(){
return ok("This is not a static method.");
}
}
除了使用Guice进行依赖注入的明显且记录良好的优点之外,在我看来,纯粹的非静态控制器将有助于实现线程安全的代码。但我必须说我不确定。所以我的问题是:有人能指出我推荐使用非静态控制器的案例吗?还有需要静态控制器的情况吗?
它对播放框架对控制器功能的“scala包装”有什么影响吗?
非常感谢。
答案 0 :(得分:3)
您提到的依赖注入对我来说应该始终使用非静态控制器的原因。它使您的代码更容易测试。
非静态控制器确实可以使编写线程安全的代码稍微容易一些。如果你想在控制器中直接放置mutable(而不是跨实例共享)状态(我不建议这样做),但是,如果你的其他地方有非线程安全的代码,那么控制器只是你应用程序的一部分。它不会拯救你。
无法想出为什么要使用静态控制器。