Java中play框架中静态控制器与非静态控制器的区别

时间:2014-03-19 13:42:27

标签: java scala playframework guice

我想知道在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包装”有什么影响吗?

非常感谢。

1 个答案:

答案 0 :(得分:3)

您提到的依赖注入对我来说应该始终使用非静态控制器的原因。它使您的代码更容易测试。

非静态控制器确实可以使编写线程安全的代码稍微容易一些。如果你想在控制器中直接放置mutable(而不是跨实例共享)状态(我不建议这样做),但是,如果你的其他地方有非线程安全的代码,那么控制器只是你应用程序的一部分。它不会拯救你。

无法想出为什么要使用静态控制器。