2009-01-26 73 views
19

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

回答

22

我在这个话题上收集了一些经验,因为我在11月开始编写一个新项目。该项目现在处于后期阶段。

对于我来说,下面的设计准则是重要的:

  • 使用现代技术堆栈,既有趣的使用,将在未来的普遍使用。
  • 减少项目工件的数量 - 在有意义的地方使用注释/ Java代码,省略XML。
  • 是开源
  • 使用框架有一个活跃的社区
  • 不是α-生育阶段
  • 是轻量级
  • 避免的概念重复
  • 我可以解释它的概念到我的两个同伴开发人员尽管是优秀的程序员,但从未使用过DI或Web框架。
  • ,可以作为techological基础,未来的项目

Google Guice作为DI容器是一个明显的选择 - 显然是最想好了DI contianer,以卓越的开发和良好的社区。它满足了上面提到的所有要点。

所以我建立了我的基础技术堆栈。以Guice开始,为持久性添加Hibernate(以及warp-persistwarp-servlet)。然后,我写了一些基本的DAO,选择一些东西。

然后我试图做到以下几点:在上面添加了一个不同的web框架。

我创建了一个表一个简单的页面,由DAO,头和一个文本框填充所有四个框架。

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

XSLT和XStream的是怎样的一个铁杆的办法。这不是一个真正的框架,而是一个针对高性能应用程序的完全无状态技术。这是服务测试页面的最快方式。在调试模式下,本地主机上的3   ms与其他框架约30-50   ms。

吉斯一体化是相对平稳,并使用它使我能够注入到Servlet和注入的HttpRequest,HttpResponse对象,在其它对象的会话经servlet的好,周围没有通过他们。缺点:根本没有社区,因为我是唯一一个会考虑这个堆栈的人。 - 没有现成的组件。

然后我看了看JSF和吉斯:这当然有可能把注射器在servlet上下文,并使用吉斯作为一个服务定位器。使用直接的方法,不可能在其他地方注入辅助bean。使用自定义变量解析器部分地解决了这个问题,但是随后你在JSF文件中失去了所有IDE集成,再加上你不得不使用难看的FQN作为你的支持bean,或者在某处建立一个字符串 - > Guice键映射。两者都是丑陋的:

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

经部件:我创建了使用这种乐趣简单的例子;这是早期的阿尔法阶段。它很好用,它的组件易于自己实现和重用。它旨在提供与完美Guice集成的类型安全HTML。由于看起来它当时只有一名活跃的开发人员,现在谁正在开发Guice 2.0,我想说社区几乎不存在。它像魅力一样工作,速度相当快,但我会成为阿尔法测试人员。这对我来说是一个商业项目来考虑太危险了。

的Apache Wicket的:这个项目第一次惊讶我检票IOC和检票吉斯核心下载撞在了一起。在网页中构造器注入是不可能的,只有setter +字段。 Wicket网页中的注射很简单,只需在要填写的字段中添加@Inject - 但您不应理解how it works in background。棘手的事情发生。注入网页在理论上是可行的 - 但我没有使用它一次,因为这使得它不可能使用挂载的URL,再加上它会混淆持久化/序列化状态。 类的注入成员透明地处理网页序列化,这是启用浏览器后台支持所必需的。 Wicket使用零外部工件 - 只是应用程序类中的URLs的一点配置。所以所有的配置都是用Java完成的 - 这很适合Guice模型。明确分离HTML和Java。它是开源的,就像大多数质量好的组件一样。它自2005年(?)开始,是一个顶级Apache项目。虽然它是一个功能丰富的框架,但其合理的紧凑型(所有核心类都适合我的屏幕上的一个JPEG)。与其他人不同,它并没有带来自己的IoC机制,而是将IoC视为可以由Spring Framework,Guice等提供的服务,并且这种理念使得它更加优秀w.r.t. Guice整合。 我提到了真正的智能和简单的Ajax支持吗?

框架没有深入评估:tapestry5 - 带来了自己的国际奥委会。 Seam:不是一个框架,而是一个通常与Spring,JSF结合的元框架。休眠。 (虽然理论上可以用吉斯替代春天。)

总结:关于评估的框架,Apache Wicket是明确的赢家 - 关于Guice集成+提及的所有其他标准。

除了我们两个,其他一些人have had this problem before

1

一个好的轻量级web容器是Simple。它非常高效,可以与框架一起使用,如RestletJersey

+0

Guice + DI框架== PITA。泽西竞争/干扰依赖注入,两者的开发人员从未找出合理的解决方案。有桥梁和kludges和黑客,但泽西岛与DI没有很好的发挥。 – toolbear 2010-04-19 15:49:17

+1

相反,Jersey具有DI的自己的抽象,因此插入DI提供者很容易。 Jersey + Guice对我们非常有用。 – Eelco 2011-08-05 18:57:19

8

Wicket has a Guice module built in,我没有使用过(但我已经使用Wicket相当多,并喜欢它)。

+1

wicket的问题在于它是一个非托管框架,即您负责实例化组件。我们在引擎盖下处理这个问题的方式是向组件实例化侦听器请求注入。它的工作原理 - 但绝对不是* guice的* web框架。 – 2009-02-13 13:29:38