【发布时间】:2017-10-11 14:57:03
【问题描述】:
我们有一个基于 Jetty 9.3 和 Jersey 2.7 的 REST API 服务器
依赖注入适用于与库捆绑在一起的 HK2。我们通过ResourceConfig 将所需的服务注册到应用程序Handler 并有类似的东西:
handler.addServlet(new ServletHolder("main-api", new ServletContainer(resourceConfig)), MAIN_SERVLET_PATH + "/*");
然后我们想将一些 HTTP 端点移动到一个单独的“管理”端口。因此,我们为每个相关路径(“/admin”和“/api”)创建了两个独立的ServerConnectors,一个用于每个端口,两个独立的Handlers 包装了映射到相关pathSpecs 的独立ServletHolders )。
问题在于,每个处理程序现在都创建了一个单独的ServiceLocator,并带有自己的一组托管服务。因此,我们无法在 admin 和 api 端点之间共享服务 - 在两个处理程序中定义的 Singleton 对象被创建了两次。
尝试在两个 ServiceLocator 之间创建“桥梁”——但这会导致范围资源出现问题。尝试创建第三个 ServiceLocator 并将其桥接到其他两个定位器 - 也不好。
知道如何在 Jetty 中的不同处理程序之间共享 DI 对象吗?或者对如何实现上述目标有其他想法?
【问题讨论】:
-
不确定它是否会起作用,但您可以尝试设置 this property as an init-param 将您创建的定位器作为 init-param 值传递。
标签: java dependency-injection jersey jetty hk2