我已经设法通过 HK2 注入破解了我的工作泽西/码头设置,但鉴于我发现大量有些令人困惑(有时不一致)的文档,我不确定我是否错过了一些正确处理的重要细节..就目前而言,我正在像这样引导servlet;
// Jersey
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
ServletContainer jerseyServletContainer = new ServletContainer(new AppResourceConfig());
ServletHolder jerseyServletHolder = new ServletHolder(jerseyServletContainer);
servletContextHandler.setContextPath("/");
servletContextHandler.addServlet(jerseyServletHolder, "/api/*");
// Wire up Jetty
HandlerCollection handlerList = new HandlerCollection();
handlerList.setHandlers(new Handler[]{ servletContextHandler });
Server server = new Server(configuration.getInt("Server.Port"));
server.setHandler(handlerList);
server.start();
server.join();
我将我的 AppResourceConfig 定义为;
public class AppResourceConfig extends ResourceConfig {
public AppResourceConfig() {
register(new AppBinder());
packages("org.sandbox.resources");
}
}
和我的 AppBinder 一样;
public class AppBinder extends AbstractBinder {
@Override
protected void configure() {
bind(new StringService()).to(StringService.class);
}
}
这一切都适用于我的简单测试用例,但我不清楚一些事情。Jersey 文档引用了一个我应该扩展的应用程序类,并使用 Injections.addBinding 设置绑定。然而,为了做到这一点,他们以某种方式使用 @Inject 将 ServiceLocator 实例放入他们的构造函数中。然后他们似乎根本没有创建活页夹?(https://jersey.java.net/documentation/latest/migration.html -- 26.14.1.1. 注入自定义对象)。
有人可以阐明我的方法是否正确,也许可以启发我了解 Application 和 ResourceConfig 之间的区别以及我实际上应该做什么以与框架的意图保持一致?