作为Java领域最Railsful的框架,Play有如一股清新之风,以不破不立之势,一扫以往JavaEE开发臃肿庞杂之惑,迅速建立起了独特的简单之美。Play框架架构于标准的Java体系之上,开发起来却与Rails框架非常神似;其框架本身的核心代码只有不到2万7千行(含注释),可谓小巧精致,非常极简主义,却包含了从Web框架到对象持久、从动态编译到单元测试、从缓存到异步作业框架、从插件到模块扩展体系等众多功能,是一个全栈框架——“All you need to create a cool web application”;它吸收并重用了大量已有Java类库,却依然能够独树一帜、标新立异。
如果说当年的Spring框架,是以“JavaEE without EJB”打出了响亮的口号,将传说中的EJB组件技术和昂贵的EJB容器轰下神坛;那么现在的Play框架,则类似“JavaWeb without EE”,甚至不需要Servlet,它更彻底地宣称,自己是一个代替企业级Java框架栈的、清爽的平台。
Play框架一开始就宣布,这是一个“无痛的Java框架”,关注于开发人员的生产力,针对RESTful架构,是敏捷软件开发的绝佳搭档:
1、没有了“编译-打包-部署”,直接“修改-保存-刷新”;
2、非常详细的编译错误提示
3、简单的无状态MVC架构
4、HTTP直接映射到代码调用
5、高效的模板引擎
6、强化的JPA
7、测试驱动开发
8、全栈式应用框架
我把以上几点称为其八大“美学”特征,但是,在试用了Play框架,并作初步的分析之后,我却又逐渐发现其如下的八大“暴力”特征:
1、自带嵌入式的Java编译器,不再需要构建工具编译、打包代码;
2、自带嵌入式的HTTP服务器,不再需要打包部署到Servlet容器;
3、自带在嵌入式服务器中运行的测试框架,所有的测试类,必须以测试模式启动服务器方式执行
4、严格按MVC组织应用代码,各层组件类必须继承基类,没有“优雅”的接口实现,也不用依赖注入;
5、对渲染响应结果的跳转控制,居然使用“异常”抛出机制 ;
6、控制器类的Action方法通通是静态的,直接调用静态方法即为Action链重定向;
7、将模型类的字段声明为public,再通过框架编译成私有字段和公共属性访问方法,访问模型对象的属性时也不使用get/set;
8、打破Java的封闭类定义,可以为Java类库中的类定义增强方法,并在响应模板中嵌入的增强对象上调用。
综合起来,统称为Play框架的“暴力美学”比较合适。这样一个矛盾的结合体,究竟会是怎样一个框架?它又是如何做到的呢?我很疑惑,也很期待,希望能够从框架的源码入手,通过抽丝剥茧,层层解读,找到答案。
Play框架的命名,正是为了一反传统JavaEE开发的臃肿,代表着一种轻松、玩乐、写意的态度,因此为不失其初衷,我想也给接下来的几篇文章取一个轻松的名字,就叫Playing Play!系列吧,应该很合适。
liuu9@163.com
liuu.iteye.com
分享到:
相关推荐
Thank you for playing! Press any key to continue . . . Another Sample: CP1200 Guessing Game Written by Lindsay Ward Please enter your bet (up to $100.00): $-20 Your bet is $100.00 Guess a number ...
A Complete Guide To Playing Badminton
如果你开始玩... 在新年前夜开始播放有意义的(可以说是)剪辑或歌曲已成为一个网络笑话,这样您。 例如: 该网站可让您选择预设或构建自己的自定义倒计时,以便您也可以正确地开始新的一年。
一组技术资源,让您可以通过玩游戏来学习新事物 基本原理 学习新事物不一定很无聊,尤其是在技术方面! 这个存储库试图收集一些有趣的资源,可以帮助您通过玩游戏获得一些新的技术技能。 CSS [免费]:通过解决编码...
Play.java for Simple Bridge Card Playing Programming. It's a main java file using javaFX
em是一个漂亮的命令行实用程序,用于按名称引用表情符号字符。 提供一些表情符号的名称,那些幸运的表情符号将显示在您的终端中,然后复制到剪贴板中。 自动地。 表情符号也可以按类别和方面进行搜索。用法示例让...
信息安全_数据安全_Playing_with_Fire:How_Cyber_Phys 安全防御 安全 数据分析 解决方案 云安全
Twitter Bootstrap需要与Play表单助手生成的默认布局不同的表单布局,因此此应用程序还提供了一个集成自定义表单输入构造函数的示例。 带有Twitter Bootstrap 3.1.1的Bootswatch-Yeti,可改善应用程序的外观 ##...
node-airplay是用于Apple的AirPlay远程播放协议的本机javascript客户端库。 安装 从npm: npm intall airplay-js 用法 // remote video var browser = require ( 'airplay-js' ) . createBrowser ( ) ; browser . ...
信息安全_数据安全_Playing_to_Win:What_Makes_a_Winn 安全架构 web安全 移动安全 金融安全 web安全
#Playing MultipartFormData 在 Play Framework 2.3.8 中处理和测试 MultipartFormData 请求的基本示例在 Web 应用程序中上传文件的标准方法是使用具有特殊 multipart/form-data 编码的表单,它允许您将标准表单数据...
正在播放的 Google Play 从谷歌播放音乐标签中提取信息
「网络安全」Playing_to_Win:What_Makes_a_Winning_Abstract - 安全集成 APT WEB应用防火墙 渗透测试 安全体系 漏洞分析
播放React流畅使用Slick 3.0构建React式Play应用程序###说明:- 如果尚未安装PostgreSQL,请安装它。 你可以从得到创建一个名为test的数据库如果尚未安装Typesafe Activator,请安装它。 您可以从这里获取: : 执行....
欢迎来到我项目的GitHub页面: NowPlaying for Spotify ! 这是一个Spotify Connect可视化工具,其代码库在半天内完成。 该项目已获得GNU GPL-3.0许可。 网站: 个人不和谐帐户: @busybox#2540 专用Discord...
Playing for Real will sell into advanced undergraduate courses in game theory, primarily those in economics, but also courses in the social sciences, and serve as a reference for economists.
该库可让您访问一副实用的纸牌和一副 21 点纸牌。 甲板可以用鞋码初始化 安装 将此行添加到应用程序的 Gemfile 中: gem 'playing_cards' 然后执行: $ bundle 或者自己安装: $ gem install playing_cards ...
on Android Market: Listen for a whistle and responses with user defined image presentation and sound playing. Current features Clap Api - Detect whether the input audio is a clap Whistle Api - ...
Playing Cards with CSS3! body { background: #DDDDDD; overflow: hidden; } body .fire { color: #FF0000; } p { background: #FFFFFF; border: 1px solid #CCCCCC; border-radius: 5px 5px; -moz-border-radius:...
粒子系统的一个简单框架 class CParticleSystem; class CParticle { public: enum TYPE { VISTUAL, PARTICLE_SYSTEM }; public: CParticle(VOID); virtual ~CParticle(VOID); public: INT liveFrame; // ...