写点什么

Java 微框架:不可忽视的新趋势

  • 2015-06-16
  • 本文字数:1334 字

    阅读完需:约 4 分钟

任何语言都有优缺点。对 Java 而言,它安全、经过严格测试、向后兼容,但却牺牲了部分灵活性和简洁性。于是,有人就尝试寻找方法,以便能规避 Java 的臃肿,同时又利用 JVM 的强大功能。第一波努力围绕轻量级Java 框架展开,而现在,第二波努力已经出现,即Java 微框架。近日,软件分析公司Takipi探讨了这一新趋势。

随着语言的成熟,每次发布都会增加一些库。时间一久,对于大部分项目而言,包含在这些库中的许多功能都不是它们真正需要的。微框架就是要解决这个问题,其思想是:创建一个专用而又灵活的解决方案,满足生产过程的基本需求。

Java 微框架是轻量级 Java 框架的延续。它们可能是当今最轻量级的 Java 开发方式。虽然目前应用范围有限,但已经有在生产环境中成功部署的案例。Josh Dreyfuss 来自 Takipi 的产品营销部门, 他介绍了三种当前较为流行的 Java 微框架。

Ninja 是一个用于创建 Web Service 和应用程序的全栈 Java 微框架。它综合 Play 和 Ruby on Rails 的优点,并以纯 Java 格式提供。作为一个综合性软件栈,Ninja 提供了大量开箱即用的功能,如 JSON 解析、HTML 渲染,使得它简单易用。在扩展性方面,Ninja 采用了无状态设计,只需要增加服务器就可以实现横向扩展。不过,内置大量功能和简单易用的代价是,用户选择减少,工具本身占用空间较大。总之,Ninja 重新设计了 Java 框架,提供了简单、可扩展、易于使用的功能。感兴趣的读者可以查看 Ninja 的入门教程

Spark (注意不要同 Apache Spark 混淆)的设计初衷是,可以简单容易地创建 REST API 或 Web 应用程序。它是一个灵活、简洁的框架,大小只有 1MB。Spark 允许用户自己选择设计应用程序的模板引擎以及选择最适合他们项目的库,比如,HTML 解析功能就有 Freemarker、Mustaches、Velocity、Jade、Handlebars、Pebble 或 Water 等选项可供选择,而且很少需要配置或样板文件。不过,灵活简单的代价是,用户可选的功能减少。总之,Spark 剔除了许多 Java 的臃肿之物,提供了一个最小化的、灵活的 Web 框架。但由于精简程度较高,它缺少了一些功能,不适合用于大型 Web 应用程序的开发。感兴趣的读者可以查看 Spark 的入门教程

Jodd 是一个 Java 微框架、工具和公用程序的集合。所以,它同上面两个框架可能不具有直接可比性,比如,Spark 可以作为 Jodd 的一个组件。Jodd 的目标是减少许多 Java 工具和框架的空间占用,提高它们的速度,提供一个超级轻量级的框架和工具精选集合。Jodd 中的每个库都是单独提供的,用户可以选择使用。这样一个提供若干功能的框架集合似乎与微框架背道而驰,但实际上,Jodd 大小总共不过 1.5MB。总之,Jodd 是一个框架和工具的集合,用户可以对它们自由组合,形成自己的解决方案。但同时,这种灵活性也增加了使用的复杂度。感兴趣的读者可以查看 Jodd 的入门教程

下面是上述三种框架的流行度对比:

此外,Dreyfuss 还列出了其它一些框架,包括 JHipster Javalite Ratpack Vert.x 。感兴趣的读者可以进一步研究。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-06-16 21:5314822
用户头像

发布了 1008 篇内容, 共 413.9 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

[Pulsar] Delayed message原理

Zike Yang

Apache Pulsar 11月日更

架构实战 - 模块四

唐敏

「架构实战营」

部署Apollo

小鲍侃java

11月日更

linux总结10大危险命令

入门小站

Linux

【Flutter 专题】04 图解第一个程序遇到的安装依赖问题

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

【死磕Java并发】-----Java内存模型之从JMM角度分析DCL

chenssy

11月日更 死磕 Java 死磕 Java 并发

Python中的控制流:break和continue

Peter

Python 控制流

一份数据的6种Plotly画法

Peter

数据分析 可视化

flutter 开发中 vscode 插件推荐 3

坚果

flutter 11月日更

【LeetCode】整数替换Java题解

Albert

算法 LeetCode 11月日更

如何设计高性能高可用存储架构

天天向上

架构实战营

18 K8S之存储卷简述

穿过生命散发芬芳

k8s 11月日更

redo Log 的持久化过程

卢卡多多

Redo Log 11月日更

Electron常见问题 48 - Electron 获取本机 MAC 地址

liuzhen007

11月日更

Vue进阶(贰佰):前端UI框架介绍

No Silver Bullet

Vue UI 11月日更

Serverless 下的微服务实践

阿里巴巴云原生

阿里云 Serverless 微服务 云原生 SAE

☕【Java技术指南】「技术盲区」看看线程池是如何回收和维持运作线程的核心技术体系

码界西柚

Java 线程池 11月日更

[ Kitex 源码解析] 函数式编程

baiyutang

golang 微服务 Go 语言 11月日更

只需10分钟,让你的企业应用具备OCR能力

明道云

又谈mysql,面试官问表结构设计要注意啥?

微客鸟窝

MySQL 11月日更

在线等比数列项数生成器

入门小站

工具

完善Django的MVT框架开发,记得添加路由哦~

老表

Python django web开发 11月日更 博客系统

测试左移实践介绍

刘冉

TDD 自动化测试 测试驱动开发 测试左移 ATTD

Java将增加虚拟线程,挑战Go协程

编程宝库

Java golang 并发

不用找了,这本书帮你完全搞定Spring Cloud Alibaba

胡弦(关注公众号架构随笔录)

分布式架构 spring cloud alibaba

前缀和后缀运算符有什么区别?

devpoint

JavaScript 11月日更 前缀运算符 后缀

Prometheus Exporter (二)Windows Exporter

耳东@Erdong

Prometheus exporter 11月日更 Windows Exporter

Android C++系列:Linux文件系统(一)

轻口味

c++ android jni 11月日更

前端开发:Node版本引起的报错问题

三掌柜

11月日更

dart系列之:创建Library package

程序那些事

flutter dart 程序那些事 11月日更

.NET Core 中对象池(Object Pool)的使用

喵叔

11月日更

Java微框架:不可忽视的新趋势_Java_谢丽_InfoQ精选文章