Web框架:Play与Spring MVC有何不同?

51

Play Framework 提供以下简要概述,但除了Groovy模板引擎(如果需要可以在Spring MVC中使用),Spring似乎提供了所有相同的功能并更多...

  • 修复漏洞并重新加载! 编辑Java文件,保存,刷新浏览器并立即查看结果!无需编译、部署或重新启动服务器。Spring也可以做到这一点,但可能会变得很烦人。

  • 无状态模型 Play是一个真正的"不共享任何东西"的系统。准备好REST,在多个服务器上运行相同应用程序的多个实例,轻松扩展。典型的Spring应用程序具有无状态的应用层;它不是纯RESTful,除非你想这样做,但Spring已经"为REST准备好了"。

  • 高效的模板系统 基于Groovy作为表达式语言的干净的模板系统。它提供了模板继承、包含和标签。Spring使用Java,但也可以选择Groovy。

  • 快速解决错误 当错误发生时,play会显示源代码和包含问题的确切行。甚至在模板中也是如此。Spring也可以做到这一点。

  • 创建酷炫Web应用程序所需的一切 提供与Hibernate、OpenID、Memcached的集成...和一个插件系统。Spring与一切集成并提供更多功能。

  • 纯Java 使用Java代码,使用任何Java库,并使用首选的IDE进行开发。与eclipse或netbeans很好地集成。Spring也是纯Java。

  • 真正快速 启动快速,运行快速!主观的,但Spring也很快。

那么Play框架与Spring MVC有什么不同之处呢?简单来说,Spring能做什么而Play框架不能(反之亦然)?


2
你似乎特别指的是Spring MVC,而不是Spring的整体。 - skaffman
@Play和Spring,你能分享一下你上面列出的一些功能吗?比如自动重新加载、模板引擎等等。 - quangson91
除非你使用Scala,否则Play并不吸引人。但是如果使用Scala,它将轻松击败Spring。 - Jus12
1个回答

12

我觉得双方都说自己是"纯Java"很有趣。

当然,一个项目想要完全不使用除了Java之外的东西是不现实的。但是,"纯Java"这个标签应该有一些标准,我认为这两个框架都不符合。

Play实际上修改了Java语言的语义。只要明确指定就没问题。如果你进行了一些字节码操作,那么请坦诚地告诉别人。通常这是通过AOP-ish技巧完成的,实例方法被装饰为具有额外行为,它们的显式行为(在代码中编写)通常会被保留。这并不太难接受,我们可以假装我们的代码是由框架子类化的,并且我们的方法被覆盖以具有额外的行为。

在Play中,同一类中的一个静态方法调用另一个静态方法可能会产生神奇的效果,而且其行为与方法调用完全不同。如果一个Java程序员无法再确定静态方法调用是什么,这将是一个巨大的问题。

Spring - 好吧,他们的Java部分还算是"纯Java"。但它太神奇了(从Java的角度看),并且过于依赖一个庞大的框架,把Spring称为"纯Java"就像忽略肉类把汉堡叫做"纯素"。肉是最好吃的部分!


4
我理解你的观点。在Play!中,控制器类中的公共静态方法是一个动作。从一个动作调用另一个动作会发出HTTP重定向。一旦你了解了这个规则,就不会有太多惊喜了,但这是Play!讨论列表中非常常见的问题。我同意使用“execute”、“renderAction”或类似的方法可能更清晰。 - opensas
30
这个回答怎么解决问题了?我只看到“他们都做魔法的事情”。 - Jens Schauder
他传达的微妙之处是:“它们都做神奇的事情,但它们的做法不同”。 - Espresso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接