[英]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.