我们有一个基于码头9.3和2.7泽西HK2依赖注入在多个servlet
依赖注入正常工作与自带的库捆绑HK2一个REST API服务器。我们通过ResourceConfig
注册到应用Handler
所需要的服务,并有类似:
handler.addServlet(new ServletHolder("main-api", new ServletContainer(resourceConfig)), MAIN_SERVLET_PATH + "/*");
我们当时就想一些HTTP端点的移动到一个单独的“admin”的端口。因此,我们为每个端口创建了两个单独的ServerConnector
s,并为每个相关路径(“/ admin”和“/ api”)创建了两个单独的Handler
s,它们分别映射到相应的pathSpecs,并将其分别包装为ServletHolder
。
问题是,每个处理程序现在都创建一个带有自己的托管服务集的独立ServiceLocator
。因此,我们不能在admin和api端点之间共享服务 - 在两个处理程序中定义的单例对象都会创建两次。
尝试在两个ServiceLocators之间创建一个“桥梁” - 但这会导致有限的资源问题。试图创建第三个ServiceLocator并将其连接到另外两个定位器 - 也不是很好。
任何想法如何在Jetty中的不同处理程序之间共享DI对象?或者有一个可以实现上述目标的另一种想法?
不知道是否会工作,但你可以尝试设置[此属性作为一个init-PARAM](HTTPS://jersey.github。 io/apidocs/2.26/jersey/org/glassfish/jersey/servlet/ServletProperties.html#SERVICE_LOCATOR)将创建的定位器作为init-param值传递。 –