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