哪个Java Web Framework最适合Google Guice?

我打算开始一个新项目,并且正在研究当前最先进的Java Web框架。 我决定围绕Guice构建我的应用程序,并且可能使用非常轻量级的ORM,如Squill / JEQUEL / JaQu或类似的,但我无法决定Web框架。 哪一种最适合这种轻量级环境? 哪一个最好与Guice整合?

我在11月开始为一个新项目开始编程时,已经积累了一些关于这个主题的经验。 该项目现在处于后期阶段。

对我来说,以下设计指南很重要:

  • 使用现代技术堆栈既有趣又可以在将来使用。
  • 减少项目工件的数量 – 在有意义的地方使用注释/ Java代码,省略XML。
  • 使用开源框架
  • 拥有一个活跃的社区
  • 不是alpha阶段
  • 很轻巧
  • 避免重复概念
  • 我可以向我的两位开发人员解释其中的概念,他们 – 尽管是优秀的程序员 – 从未使用过dependency injection (DI)或Web框架。
  • 可以作为未来项目的技术基础

Google Guice作为DI容器是一个显而易见的选择 – 显然是最精心设计的DI contianer,拥有出色的开发人员和良好的社区。 它符合上面提到的所有要点。

所以我建立了我的基本技术堆栈。 从Guice开始,添加了Hibernate for persistence(以及warp-persist和warp-servlet )。 然后我写了一些基本的DAO来选择一些东西。

然后我尝试执行以下操作:在其上添加了一个不同的Web框架。

  • XSLT与xStream使用常规HTTP servlet
  • JSF- MyFaces
  • Apache Wicket
  • 经小部件

我创建了一个带有表的简单页面,由DAO填充,标题和包含所有四个框架的文本字段。

这些是我在比较四个框架时的发现。

XSLT和XStream是一种硬核方法。 它不是一个真正的框架,而是一个可行的完全无状态的高性能应用技术。 这是迄今为止服务测试页面的最快方式。 在调试模式下,localhost为3 ms,而其他framworks为30-50 ms。

Guice集成相对平滑,使用warp-servlet很好,这使我能够注入servlet并在其他对象中注入httprequest,httpresponse,session,而不会传递它们。 缺点:根本没有社区,因为我是唯一会考虑这个堆栈的人。 – 没有现成的组件。

然后我看了一下JSF和Guice:当然可以将注入器放在servlet上下文中并使用guice作为服务定位器。 使用简单的方法,不可能在其他地方注入支持bean。 使用自定义变量解析器可以部分解决这个问题,但是你失去了JSF文件中的所有IDE集成,而且你必须为你的支持bean使用丑陋的FQN ,或者在某处构建一个string-> Guice键映射。 两者都很难看:

  • 优点:良好的社区,许多开发人员在就业市场(没有我的标准)。 如果出现问题,你不会因为选择JSF而被解雇。
  • 缺点:带来自己的控制反转控制 (IoC)机制,它在概念上与guice冲突。

warp-widgets:我创建了一个简单的例子,使用它来获得乐趣; 这是早期的alpha阶段。 这很好用,它的组件很容易实现和重用。 它旨在为类型安全的HTML提供完美的Guice集成。 既然它当时只有一个活跃的开发人员,现在谁正在为Guice 2.0工作,我会说社区几乎不存在。 它的工作就像一个魅力,速度相当快,但我会成为alpha测试员。 对我来说,这对于商业项目而言太冒险了。

Apache Wicket:这个项目首先让我感到惊讶,wicket-ioc和wicket-guice在核心下载中聚集在一起。 网页中的构造函数注入是不可能的,只有setter + field。 Wicket网页中的注入很简单,只需将@Inject添加到要填充的字段中 – 但是您不应该理解它在后台运行的方式 。 棘手的事情正在发生。 从理论上讲,网页的注入是可行的 – 但我没有使用过一次,因为这使得无法使用已安装的URL,而且它会混乱持久/序列化状态。 注入的类成员透明地处理网页序列化,这对于启用浏览器支持是必需的。 Wicket使用零外部工件 – 只是应用程序类中URL的一点配置。 所以所有的配置都是用Java完成的 – 这非常符合Guice模型。 清楚地分离HTML和Java。 它是开源的,就像大多数组件一样,质量很好。 它自2005年以来(?),是一个顶级的Apache项目。 虽然它是一个function丰富的框架,但它的API非常合理(所有核心类都适合我的屏幕上的单个JPEG )。 与其他人不同,它并没有带来自己的IoC机制,而是将IoC视为可以由Spring Framework ,Guice等提供的服务,并且该理念使其优于Guice集成。 我是否提到过非常智能和简单的Ajax支持?

没有深入评估的框架:tapestry5 – 带来自己的IoC。 Seam :不是一个独立的框架,而是一个通常与Spring,JSF合作的元框架。 hibernate。 (虽然Spring理论上可以被Guice取代。)

总结:在评估的framworks中, Apache Wicket是明显的赢家 – 关于Guice集成+提到的所有其他标准。

除了我们两个,其他一些人之前遇到过这个问题 。

Wicket内置了一个Guice模块 ,我没有使用过(但我已经使用了Wicket ,并且喜欢它)。

这是一篇关于将Guice与Stripes集成的文章

Play框架很不错。 它有Guice支持 (我还没有尝试过)。

一个好的轻量级Web容器是简单的 。 它非常高效,可以与Restlet和Jersey等框架一起使用。

Mojave MVC Web框架是一个非常简单,轻量级的框架,它包含了Guice。