Java Play framework

五月 13th, 2012 1,615 留下评论 阅读评论

因本科几个老同学的邀请参与一个项目的开发,用到了这个全新的Java框架,“Play”。名字很有意思,接触的1.2.4版本而不是最近的2.o,上手很快,安装包里有自带的Sample程序。框架的易用程度大大超过了自己的预期,果然随着时代的发展Java框架越来越强大并且越来越人性化,最大程度地方便程序员开发应用。

一直使用也看好Spring MVC,但是Spring的日益臃肿让这个框架的优势在不断流失。列举Play一些非常棒的地方,特别是较之Spring MVC的优势。

  • Play最大的一个特点就是开发期间每次修改Java代码无需重启Java Web服务器,瞬间感觉和写PHP程序一样方便!这个真的是太爽,之前写Java Web程序调试,每次关闭再重启Tomcat少说也得5秒钟吧。
  • 配置文件齐全,基本上帮你考虑到了所有可能要配置的内容(配置、持久、缓存、日志、国际化等)
  • URL route很清楚很简单,而且完全自定义URL Pattern(SpringMVC的Route还是不算太好,不能定义/model/action这样的url)
  • 一个Java类作为一个Controller可以每个方法都对应一个HTTP请求的方式,大量减少了类的数量
  • Controller的方法和Template文件对应很好,默认模式下自动对应,十分方便
  • 根据Action方法的参数类型和名称自动从提交参数中自动封装,包括对JavaBean的封装,对大量属性的表单特别有优势
  • 对传入参数的验证很容易而且基本不用再自己写代码,全部在Model类里用Annotation搞定
  • Action方法可方便返回Html、Text、Json、Xml等数据,各种方便的API
  • Model层真的简略到基本不用写任何代码了,利用Hibernate自动建表、插入和更新自不用说,因为所有Model从特定类继承而来,丰富的API基本够平常所需,而且查询接口十分简单和强大。再也不用像SpringMVC那样每一个Model都要建一个Dao,每一个查询都要写一个十分复杂的Hibernate方法。

Play框架已经不仅仅是个框架的概念了,而是一个开发环境了,因为要利用它帮你生成Project,eclipsify进入开发模式,run进入debug模式,war进入发布模式,而且Play自定义了一套Project下的目录结构和文件名称,这些一经修改很有可能运行就会出错。这是一把双刃剑,虽然方便了开发者和初学者,但是对于比较喜欢自己完全掌控代码和框架运作的开发人员来说并不是一件好的事情。

当然,也感觉Play有些还不太习惯的地方,较之其他框架另类之处,还有一些有待改善的地方。

  • 包结构名默认被限定,不符合大众模式(域名倒置的形式)
  • 一个Controller不能自定义对应的Template的目录名,而默认采用与Controller名一致的目录名(强烈建议应该在Controller上加一个Annotation来自定义Template的目录名)
  • View模式下的模板语法(Groovy)据说效率比较低
  • 开发模式下,因为靠Play自带程序运行,脱离IDE环境,较难实现单步跟踪
  • 相比Spring,加入其它第三方组件不太方便,比如更换模板引擎等
总的来说,Play让人耳目一新的感觉,第一感觉是非常棒的,真的大大加快了用Java开发Web的速度和效率,而且Play作为框架的理念也理解的很好很懂得开发人员的心思来尽量满足需求,当然个人觉得这甚至有点过了因为什么都帮你干完了开发人员的价值很多就体现不出来了。作为一个demo或者小型应用,Play绝对适合,但是要开发一个企业级大项目,就至今对Play的了解来看,也许Spring这一套路更稳重一些。
Categories: Java 标签:, ,
  1. creepyuncle | #沙发
    五月 27th, 2013 18:06

    配合intellij使用,调试会很方便吧

    好似和grails差不多

  2. 六月 1st, 2012 18:04

    看上去貌似还是不错的,但是如果第三方的支持不是太好的,这地方将是一个很严重的问题,在快速开发递交模式的时候,如果为第三方的支持单独花Effort将会变的很尴尬

    • 只是有些模块没有Spring来得方便罢了…没那么夸张呵…

  3. 五月 13th, 2012 13:57

    希望sun被甲骨文收购之后,能更加的完善java。

    • 官方的更新其实我更看重开源组织和第三方的贡献,所以更希望Oracle能更加开放Java平台

icon_wink.gif icon_neutral.gif icon_mad.gif icon_twisted.gif icon_smile.gif icon_eek.gif icon_sad.gif icon_rolleyes.gif icon_razz.gif icon_redface.gif icon_surprised.gif icon_mrgreen.gif icon_lol.gif icon_idea.gif icon_biggrin.gif icon_evil.gif icon_cry.gif icon_cool.gif icon_arrow.gif icon_confused.gif icon_question.gif icon_exclaim.gif