【问题标题】:Guice with JAX-RS使用 JAX-RS 的 Guice
【发布时间】:2023-03-30 02:22:01
【问题描述】:

我使用 Guice 作为我的依赖注入框架。我想要一些我可以添加的东西,这将使创建 REST 服务更容易。

我已经查看了 guice-servlet,它在将路径定向到 HTTP servlet 时效果很好,但这似乎就是它所做的一切,我期待 JAX-RS 之类的注释语法能够工作,但它没有。

实际上并没有使用 JAX-RS,我搜索了一下,似乎 Jersey 是它的参考实现,但看起来它使用了自己的依赖注入框架,并且不适用于 Guice。此外,它还有 5+MB 的依赖项,这对于我所追求的而言似乎很多。

Guice 是否以不适合 JAX-RS 的方式设计,如果是,我还应该做什么?

【问题讨论】:

  • 你有没有找到任何展示如何集成两个 DI 框架的帖子?你不能完全摆脱 HK2(Jersey 的内部 DI 框架),因为 Jersey 到处都在使用它作为其基础设施。但是有一些方法可以将它与 Guice 集成。我已经回答了其中一些帖子。我在进行此集成时看到的唯一问题是人们使用 Google App Engine 时。我不使用 GAE,所以我一直无法探索这个问题。
  • @peeskillet - 我的问题不在于 guice-jersey 的说法,如果我做对了事,更多的是......这是我希望很容易的事情,我会不要指望引入一个整体依赖来做到这一点 - 它对我提出了危险信号,因此提出了问题。
  • 我已经在几个应用程序中完成了 Guice + Jersey,我对此非常满意!所以是的,我会说这是正确的。
  • @Jorn - 你使用的是哪个版本的球衣,据我所知球衣 1 有一个 guice 实现,但球衣 2 没有
  • @Cheetah 我正在使用 Jersey 2 和 Guice HK2 桥:hk2.java.net/guice-bridge

标签: rest jax-rs guice


【解决方案1】:

我认为 guice-servlet 模块可能误导了您。 Guice 是一个 DI 框架。时期。 guice-servlet 模块的真正目标不是提供 servlet 和过滤器的快捷方式声明,而是支持特殊范围 requestsession。那些漂亮的快捷方式声明是语法糖。

在 Java 中选择 JAX-RS 实现有点不可能。您有多种选择(Jersey、Resteasy、Spring...)。如果您要使用完整的 JavaEE,那么您不必选择。您只需使用开箱即用的注释(和 DI)。

如果您不使用 JavaEE 服务器(只是像 Tomcat 这样的 Web 服务器或像 Android 应用程序这样的任何其他花哨的东西),那么您必须选择您的实现。如果您也在使用 DI(我推荐),那么还有一个决定要做。

所以你没有使用 JavaEE,你想使用 JAX-RS 和依赖注入来实现一些 REST API。你做了一些研究,最终选择了 Jersey 和 Guice。不错的选择,我在上一个项目中也选择了这些。是的,Jersey 的依赖图有点臃肿。我知道,这可能会更好。

现在你的问题是如何让它协同工作,因为 Jersey 使用它自己的 DI 框架 (HK2),这是一个坏事

您有很多关于 Jersey-Guice 集成的 SO 参考资料。您最好的选择是Guice HK2 bridge

什么?您想要直接参考 SO?没问题,这是一个很好的。不要忘记为答案投票。 ;-)

【讨论】:

  • jersey-guice 桥接依赖于 guice 3.0。我想知道是否有适用于 guice 4.0 的东西?
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
相关资源
最近更新 更多