HK2インジェクションを使用してJersey / Jettyのセットアップを機能させる方法をハックすることができましたが、見つけた膨大な数のやや紛らわしい(そして時には一貫性のない)ドキュメントを考えると、いくつか見逃したかどうかはわかりませんそれを正しくするための顕著な詳細..現状では、このようにサーブレットをブートストラップしています。
// 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 のドキュメントは、私が拡張すべき Application クラスを参照し、Injections.addBinding を使用してバインディングをセットアップします。ただし、これを行うために、@Inject を使用して ServiceLocator インスタンスをコンストラクターに取得しています。そして、彼らはバインダーをまったく作成していないように見えますか? ( https://jersey.java.net/documentation/latest/migration.html -- 26.14.1.1. カスタム オブジェクトの注入)。
誰かが私のアプローチが正しいかどうかに光を当て、おそらく Application と ResourceConfig の違いと、フレームワークの意図との一貫性を保つために実際に何をすべきかについて教えてもらえますか?