我們有一個基於碼頭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值傳遞。 –