在 Java SE 中焊接 (CDI) 和 Jersey-Server(JAX-RS) Bootstrap

Weld (CDI) and Jersey-Server(JAX-RS) Bootstrap in Java SE

我想弄清楚如何正确地 bootstrap 将 (3.0.0) 与 Jersey-Server (1.19.3) 焊接在一起,以建立一个带有 Java SE 的 Rest 服务器。我不是!谈论 JEE 解决方案。应用服务器在这里做得很好。 我想让它独立,没有我不需要的所有库。 我的问题是球衣服务器以他自己的方式实例化所有 REST 服务 类 而不是使用焊接。因此 @Inject 当然不起作用。 IoCInstantiatedComponentProvider 在这方面有帮助吗?

这是 Hammock 提供的功能,但如果您只想利用代码,那很好。这就是开源的魅力 - https://github.com/hammock-project/hammock/tree/master/rest-jersey/src/main/java/ws/ament/hammock/rest/jersey

具体来说,您需要实例化 JerseyServlet 并提供名称为 jersey.config.servlet.internal.resourceConfig_JerseyServletServletContextAttribute 指向一个 ResourceConfig 对象,该对象要么指向您的Application 对象,或在其中注册了所有 类。我们使用 CDI extension 来抓取这些 类。我会说我使用的是 Jersey 2 而不是 Jersey 1,我怀疑这是否适用于 Jersey 1(为 CDI 1.0 制作)。请注意,您仍然需要一个 servlet 容器。

如果你想利用 Hammock,只需将这些依赖项添加到你的项目中(我在下面使用 Jetty,但你也可以使用嵌入式 tomcat 或 undertow):

<dependency>
 <groupId>ws.ament.hammock</groupId>
 <artifactId>rest-jersey</artifactId>
</dependency>
<dependency>
 <groupId>ws.ament.hammock</groupId>
 <artifactId>bootstrap-weld3</artifactId>
</dependency>
<dependency>
 <groupId>ws.ament.hammock</groupId>
 <artifactId>web-jetty</artifactId>
</dependency>

然后您只需提供一些带注释的休息资源和 beans.xml