簡體   English   中英

HK2依賴注入在多個servlet中

[英]HK2 dependency injection in multiple servlets

我們有一個基於Jetty 9.3和Jersey 2.7的REST API服務器

依賴注入對與libs捆綁在一起的HK2很好用。 我們通過ResourceConfig向應用程序Handler程序注冊所需的服務,並具有以下內容:

handler.addServlet(new ServletHolder("main-api", new ServletContainer(resourceConfig)), MAIN_SERVLET_PATH + "/*");

然后,我們想將一些HTTP端點移動到單獨的“ admin”端口。 因此,我們為每個相關路徑(“ / admin”和“ / api”)創建了兩個單獨的ServerConnector ,每個端口一個,以及兩個單獨的Handler ,它們包裝了映射到相關pathSpecs的單獨的ServletHolder

問題在於,每個處理程序現在都使用其自己的托管服務集創建一個單獨的ServiceLocator 因此,我們無法在admin和api端點之間共享服務-在兩個處理程序中定義的Singleton對象都會創建兩次。

試圖在兩個ServiceLocator之間創建“橋梁”-但這會導致范圍資源的問題。 嘗試創建第三個ServiceLocator並將其橋接到其他兩個定位器-也不好。

有什么想法可以在Jetty中的不同處理程序之間共享DI對象嗎? 或對如何實現上述目標有另一種想法?

謝謝peeskillet ,您的建議確實解決了問題

ContextHandler defaultContext;
ContextHandler adminContext;
AbstractBinder sharedSingeltons;

ServiceLocator sharedServiceLocator = ServiceLocatorUtilities.bind("shared-locator", sharedSingeltons); 
defaultContext.setAttribute(ServletProperties.SERVICE_LOCATOR, sharedServiceLocator);
adminContext.setAttribute(ServletProperties.SERVICE_LOCATOR, sharedServiceLocator);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM