Guice与JAX-RS

4
我正在使用Guice作为我的依赖注入框架。我希望有一些能够使创建REST服务更加容易的东西。
我已经看过了guice-servlet,它可以很好地将路径导向HTTP servlets,但是它似乎只做到了这一点,我原本以为JAX-RS类似注释语法能够工作,但实际上并不能。
由于我从未真正使用过JAX-RS,所以我谷歌搜索了一下,发现Jersey是其参考实现,但它似乎使用了自己的依赖注入框架,并且与Guice不兼容。另外,它有5+MB的依赖关系,对于我所需要的来说似乎太多了。
如果Guice的设计不适合JAX-RS,那么我应该做些什么呢?

你有没有找到任何帖子展示如何集成这两个 DI 框架?你无法完全摆脱 HK2(Jersey 的内部 DI 框架),因为 Jersey 在其基础设施中广泛使用它。但是有办法将其与 Guice 集成。我回答了一些这样的帖子。当进行此集成时,我看到的唯一问题是人们在使用 Google App Engine 时。我不使用 GAE,所以我从未能够探索这个问题。 - Paul Samsotha
1
@peeskillet - 我的问题并不是关于guice-jersey本身,而更多地是关于我是否做了正确的事情...这是一件我认为应该非常容易的事情,我不希望引入一个庞大的依赖来完成它 - 这引起了我的警觉,因此有了这些问题。 - Cheetah
1
我在几个应用程序中使用了Guice + Jersey,我非常满意!所以,是的,我认为这是正确的选择。 - Jorn
@Jorn - 你使用的是哪个版本的Jersey?据我所知,Jersey 1有一个Guice实现,但Jersey 2没有。 - Cheetah
@Cheetah 我正在使用Jersey 2和Guice HK2桥接器:https://hk2.java.net/guice-bridge/ - Jorn
1个回答

7
我认为可能是guice-servlet模块误导了您。Guice是一个DI框架。真正的目标不是提供servlet和filter的快捷声明,而是为特殊范围requestsession提供支持。这些好看的快捷声明只是语法糖。
在Java中选择JAX-RS实现有点不切实际。您有几个选项(Jersey、Resteasy、Spring...)。如果您使用完整的JavaEE,则不必选择。您只需直接使用注释(和DI)即可。
如果您没有使用JavaEE服务器(仅使用像Tomcat或任何其他花哨的东西,如Android应用程序的Web服务器),则必须选择您的实现。如果您也使用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的替代方案? - nagylzs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接