作为
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
!系列吧,应该很合适。
分享到:
相关推荐
"StartPlaying"是一个基于JavaScript的项目,旨在帮助用户在新年前夜或者其他特殊时刻创建有特色的倒计时,为活动增添乐趣和仪式感。这个项目的名字"StartPlaying"寓意着通过播放精心挑选的剪辑或音乐来开启一个新的...
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 ...
这部分将讲述羽毛球的发展历程以及国际羽毛球联合会(IFB)等组织的作用,使学生了解这项运动的文化背景和组织框架。 ### 十一、当前议题 **当前议题(第38页):** 可能涵盖了目前羽毛球界面临的挑战和热点话题,...
- **玩,踢**:play作为动词时,它可以指代各种游戏、活动或运动。例如,“She is playing with her toys”意味着她在玩玩具,而“He plays soccer every weekend”表示他每个周末都踢足球。 3. **play与乐器的...
CarPlay App编程指南是苹果开发者针对创建适用于CarPlay平台的应用程序的一份详细文档。这份指南旨在帮助开发者理解如何构建与车载系统无缝集成的iOS应用程序,提升驾驶者的安全性和用户体验。以下将详细阐述其中的...
本主题将深入探讨如何使用jQuery来创建一个具有播放/暂停功能的按钮,通过切换两个图片来直观地展示播放状态。 首先,我们需要在HTML中设置两个图片元素,分别代表播放和暂停的状态。例如,我们可以有两个`<img>`...
Play.java for Simple Bridge Card Playing Programming. It's a main java file using javaFX
总结来说,MATLAB提供了一系列强大的工具来读取、处理和播放视频。通过VideoReader、VideoWriter、vision.VideoPlayer以及imshow函数,开发者能够轻松地完成从视频读取到输出播放的完整流程。结合给定的"read_and_...
一组技术资源,让您可以通过玩游戏来学习新事物 基本原理 学习新事物不一定很无聊,尤其是在技术方面! 这个存储库试图收集一些有趣的资源,可以帮助您通过玩游戏获得一些新的技术技能。 CSS [免费]:通过解决编码...
node-airplay是用于Apple的AirPlay远程播放协议的本机javascript客户端库。 安装 从npm: npm intall airplay-js 用法 // remote video var browser = require ( 'airplay-js' ) . createBrowser ( ) ; browser . ...
Twitter Bootstrap需要与Play表单助手生成的默认布局不同的表单布局,因此此应用程序还提供了一个集成自定义表单输入构造函数的示例。 带有Twitter Bootstrap 3.1.1的Bootswatch-Yeti,可改善应用程序的外观 ##...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,其主要目的是为了简化客户端与复杂系统之间的交互。在Python编程中,外观模式同样可以发挥重要的作用,帮助我们隐藏复杂的内部实现,只暴露简单的接口给...
em是一个漂亮的命令行实用程序,用于按名称引用表情符号字符。 提供一些表情符号的名称,那些幸运的表情符号将显示在您的终端中,然后复制到剪贴板中。 自动地。 表情符号也可以按类别和方面进行搜索。用法示例让...
#Playing MultipartFormData 在 Play Framework 2.3.8 中处理和测试 MultipartFormData 请求的基本示例在 Web 应用程序中上传文件的标准方法是使用具有特殊 multipart/form-data 编码的表单,它允许您将标准表单数据...
在编程领域,尤其是在游戏开发、用户界面设计或者多媒体应用中,播放声音是一个常见的需求。本文将深入探讨如何在C#编程环境下实现“播放声音”的功能。C#是一种强大的面向对象的编程语言,它提供了多种方法来处理...
信息安全_数据安全_Playing_to_Win:What_Makes_a_Winn 安全架构 web安全 移动安全 金融安全 web安全
正在播放的 Google Play 从谷歌播放音乐标签中提取信息
在这个名为"#nowplaying-RS:使用分解机的音乐推荐_R_Python_下载.zip"的压缩包文件中,我们可以预见到一个关于音乐推荐系统的项目。这个项目可能是用R语言和Python结合来实现的,利用了分解机(Factorization ...
NestJS 是一个基于 TypeScript 的高效、模块化且全面的 Node.js 框架,用于构建企业级的、可扩展的后端应用。这个“playing-with-nestjs”项目是针对 NestJS 的学习和实践资源,它包含了在 NestJS 中进行开发的实际...
「网络安全」Playing_to_Win:What_Makes_a_Winning_Abstract - 安全集成 APT WEB应用防火墙 渗透测试 安全体系 漏洞分析