Vaadin 是一个使用 UI 组件来构建 Web 应用的多语言框架,最近发布了 Vaadin Spring 项目的 1.1 版本。
在 Vaadin 的Navigator
类和View
接口方面,有两个新的特性:
- 新的
SpringNavigator
类 - 新的
@SpringViewDisplay
注解
SpringNavigator
类极大地“简化了视图的配置”,@SpringViewDisplay
注解能够用来“标记目标 Vaadin 组件,指定了我们的视图要实际展现的地方。”
另外,还有一些缺陷修正,包括使用Vaadin Spring 来序列化HTTP session。
如下的代码片段展示了如何使用 SpringNavigator
类和@SpringViewDisplay
注解:
// MainUI.java @SpringUI @Theme("valo") public class MainUI extends UI { MainViewDisplay mainContent; public MainUI(MainViewDisplay mainContent,SpringNavigator navigator) { this.mainContent = mainContent; navigator.setErrorView(ErrorView.class); } /// 其他的支撑代码... }
// MainViewDisplay.java @SpringViewDisplay public class MainViewDisplay extends Panel implements ViewDisplay { public MainViewDisplay() { setStyleName(ValoTheme.PANEL_BORDERLESS); } @Override public void showView(View view) { // 假设视图是组件,通常都会这样 setContent((Component)view); } }
在 GitHub 上的完整项目包含了上述 Java 文件源码的变更集合,阐述了用来实现导航和视图管理功能的更简洁的代码。
InfoQ 与 Matti Tahvonen 进行了交流,他是 Vaadin 的产品市场主管,讨论了这次版本相关的情况。
InfoQ:你目前在 Vaadin 的职责是什么呢?
Tahvonen:我的官方职位是 Vaadin 框架和相关 OS 库(如 Vaadin Spring)的产品市场主管,但是我的工作更像是针对开发者的宣传人员。我撰写版本发布博客、编写使用 Vaadin 与其他有趣 Java 技术进行集成的样例项目、发布技术文章、主办 webinar、参加会议(参与演讲和作为展台工作人员)、帮助新用户和客户进行 Vaadin 开发并帮助我们的工程师以及其他人员进行技术营销工作。我对 OSS 非常有热情,非常荣幸我能够从事 OS 相关的工作,而我的同事会负责 Vaadin 相关的商业扩展。
InfoQ:和其他的 Java Web 框架相比,Vaadin 的与众不同之处是什么呢?
Tahvonen: Vaadin 对 Web 技术有着最强的抽象。使用 Vaadin 框架编写应用并不需要我们接触一行 JS、HTML 或 CSS 代码(如果你想这样做的话,也是可以的),我们也不需要理解浏览器的技巧或各种形式的 HTTP 通信技术(如基本 HTTP、表单提交、AJAX、服务端推送、WebSocket 等)。如果你想编写自定义扩展的话,才需要接触底层的 Web 编程技术,我们有很活跃的社区和上百个 add-on ,所以这种场景是很少见的。在最常见的情况下,我们只需使用简单的 Java 和基于组件的编程模型,这样能让开发更简单和高效。具有桌面 UI(Swing、SWT、JavaFX)经验的开发人员或后端开发人员对于 Vaadin 会感到特别兴奋,不过也有 PHP 背景的人对 Vaadin 非常感兴趣。
InfoQ:你对 Vaadin 和 UI 的看法是怎样的,它们该如何适应微服务模式呢?
Tahvonen:最近这段时间以来,这是一个非常常见的问题。Vaadin 对微服务适配得非常好,一般而言,应用中始终会有 UI,至少会存在某种形式的 UI。在 UI 方面,会有多种策略,最佳方案要取决于你的需求。如果你的服务中具有 UI,或者使用 Vaadin + (REST)服务来构建管理端 UI,让这些服务供其他的应用消费,那么 Vaadin 非常适用于这种场景。另外,Java 也是消费 REST 服务的理想工具(没有同源的限制),在创建 mash-up 应用的时候,会消费多个微服务的数据,所以在这种情况下,Vaadin 也能运行良好。
最近,很多用户都提出了这个问题,我们决定针对这个话题编写一些内容和样例。我和我的同事 Alejandro 已经编写了第一篇文章。后续还有很多内容和样例要发布。
InfoQ:关于 Vaadin 和 / 或 Vaadin Spring,你们目前的规划是什么呢?
Tahvonen:毫无疑问,Vaadin 8 是接下来最重要的事情。在 Vaadin 中,当前的一些 API 起源非常早,那个时候还没有 lambdas 表达式,这些 API 甚至要早于泛型或 JDK 中特有的集合框架。Vaadin 8 将会是一个巨大的进步,会让代码更加类型安全、易于编写,在 CPU 和内存使用方面会更加高效。对于 Vaadin Spring 来说,也会有更新的版本。
因为我们非常重视向后兼容性(大多数的 Vaadin 应用会长期维护),我们准备了一个兼容包,借助它能够非常容易地进行升级,你可以渐进式采用新的 API。同时,Vaadin 7 版本将会继续支持,因为我们的一些客户还不能迁移到 Java 8 上,有些甚至还要支持 IE 8。
我们目前处于 beta 阶段,第一个 beta 版本在圣诞节假期前已经发布:
https://vaadin.com/blog/-/blogs/vaadin-8-beta-is-out-we-need-your-help-
至于 Vaadin Spring,我们计划为 Spring Security 提供一些辅助功能。大多数的 Vaadin Spring 用户都会同时使用 Spring Security,通过一些更深入的集成,我们相信能够让客户的起步更简单一些。
InfoQ:与原生的 JavaScript 框架相比,例如 AngularJS 或 ReactJS,它的性能 / 响应性如何呢?
Tahvonen:在着手评估 Vaadin 的时候,很多开发人员都会担心这个问题。我建议他们亲自尝试一下。如果 session 存储在服务器的内存中(通常如此),服务器的基本访问是很快的,除非服务器的位置在地球的另一端。我们可以看一下如今的 Google 搜索,每当键盘按下的时候,它都会访问服务器,但它依然非常流畅。
在与亚马逊的专家一起构建的一个样例中,我们使用了他们的地理负载均衡功能,成功玩了一个基于 Vaadin 的俄罗斯方块游戏,它运行在一个位于悉尼的 EC2 微实例上(我位于芬兰)。此时,它已经不是那么流畅了(相对于部署在同一个大洲的服务器来说),但是对于正常的业务应用来说,它能够运行地非常好。通过启用 WebSocket,我们持续地开启通信通道(在 Vaadin 中,需要添加一项依赖并且要在
UI
类上添加@Push
注解),这样能够进一步减少延迟。除了服务器往返(roundtrip)所造成的延迟,人们还应关注浏览器渲染所造成的延迟,以及执行实际的业务逻辑或数据库查询所造成的延迟,这一点与使用 Angular 和 React 是相同的。不管是 Vaadin 还是客户端的 UI 框架,我都建议为长时间运行的查询展示一些进度指示器或对话框,不要让 UI 看起来像停滞了一样。
Tahvonen 和 Stéphane Nicoll 最近录制了一个 webinar ,展现了如何使用 Vaadin 和 Spring 来构建 Java Web 应用。
查看英文原文: New Vaadin Spring Release Introduces Enhanced View Management
评论