哪种Java Web框架最适合Google Guice?[已关闭]

2022-09-02 09:28:38

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


答案 1

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

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

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

Google Guice作为DI容器是一个显而易见的选择 - 显然是最深思熟虑的DI contianer,拥有出色的开发人员和良好的社区。它满足了上面提到的所有要点。

因此,我设置了我的基本技术堆栈。从Guice开始,添加了Hibernate用于持久性(以及warp-persistwarp-servlet)。然后我写了一些基本的DAO来选择一些东西。

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

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

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

XSLT和XStream是一种硬核方法。它不是一个真正的框架,而是一个可行的完全无状态的技术,用于高性能应用程序。这是迄今为止提供测试页面的最快方式。在调试模式下,本地主机上为 3 毫秒,而其他框架上约为 30-50 毫秒。

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

然后我看了一下 JSF 和 Guice:当然可以将注入器放在 servlet 上下文中,并使用 guice 作为服务定位器。使用直接的方法,不可能在其他地方注射后备豆。使用自定义变量解析器可以部分解决此问题,但是这样您将丢失JSF文件中的所有IDE集成,并且您将不得不使用丑陋的FQN作为支持bean,或者在某个地方构建字符串>Guice键映射。两者都是丑陋的:

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

变形小部件:我用这个创建了我的简单示例来娱乐;这是早期的阿尔法阶段。它使用起来很好,它的组件很容易实现和重用。它旨在为类型安全的HTML提供完美的Guice集成。由于当时看起来只有一个活跃的开发人员,他现在正在开发Guice 2.0,所以我会说社区几乎不存在。它像一个魅力一样工作,速度相当快,但我本来会是alpha测试人员。这对我来说太冒险了,无法将其考虑用于商业项目。

Apache Wicket:这个项目首先让我感到惊讶的是,wicket-ioc和wicket-guice在核心下载中结合在一起。无法在网页中注入构造函数,只能插入 setter+字段。在Wicket网页中注入很容易,只需添加到要填充的字段中 - 但您不应该了解它在后台的工作原理。棘手的事情发生了。从理论上讲,注入网页是可能的 - 但我一次也没有使用过它,因为这使得无法使用挂载的URL,而且它会弄乱持久化/序列化状态。类的注入成员通过网页序列化透明地处理,这对于启用浏览器后退支持是必需的。Wicket 使用零外部工件 - 只是应用程序类中 URL 的一小部分配置。所以所有的配置都是在Java中完成的 - 这很适合Guice模型。HTML和Java的清晰分离。它是开源的,就像大多数数量众多且质量好的组件一样。它大约是自2005年(?)以来,是一个顶级的Apache项目。虽然它是一个功能丰富的框架,但它的API是相当紧凑的(所有核心类都适合我屏幕上的单个JPEG)。与其他机制不同,它没有带来自己的IoC机制,而是将IoC视为可以由Spring Framework,Guice等提供的服务,这种理念使其优于w.r.t. Guice集成。我有没有提到真正聪明和简单的Ajax支持?@Inject

框架没有经过深入评估:tapestry5 - 带来了自己的IoC。Seam:不是一个独立的框架,而是一个元的framwwork,通常与Spring,JSF有关。冬眠。(尽管从理论上讲,Spring可能会被Guice取代。

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

除了我们两个人,其他人以前也遇到过这个问题


答案 2

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


推荐