2

我到处搜索了如何在 Jersey 2.0 中使用 HK2 依赖注入的基本示例,但都没有找到。

这个问题看来,您需要创建一个扩展类AbstractBinder。但是,该示例的其余部分显示了如何通过编辑 web.xml 文件向您的应用程序注册活页夹。但是,我想避免这种情况,而是HttpServer直接在我的实例中注册活页夹。

这是我为我的 HttpServer 编写的:

int port = config.getInt("port", 8080);
boolean useFake = config.getBoolean("fake", false);

final URI baseUri = URI.create("http://" + "localhost" + ":" + port + "/");
List<Binder> binders = Arrays.asList((Binder)new StatusModule(useFake),
    (Binder)new NetworkModule(useFake));
final ApplicationHandler applicationHandler = new ApplicationHandler();
applicationHandler.registerAdditionalBinders(binders);

WebappContext webappContext = new WebappContext("Webapp context", "/resources");

HttpServer server = GrizzlyHttpServerFactory.createHttpServer(
    baseUri, applicationHandler);
for(NetworkListener listener : server.getListeners()){
    listener.setCompression("on");
}
server.getServerConfiguration().addHttpHandler(
    new StaticHttpHandler("/jersey2app/www"), "/static");

任何帮助将不胜感激。

4

1 回答 1

4

原来我只需要添加几行代码,但我会在这里发布,以防其他人有同样的问题。

ResourceConfig rc = new ResourceConfig();
rc.packages("com.danny.resources");
rc.registerInstances(new StatusModule(useFake), new NetworkModule(useFake));
GrizzlyHttpContainer resourceConfigContainer = ContainerFactory
    .createContainer(GrizzlyHttpContainer.class, rc);
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(baseUri);
server.getServerConfiguration().addHttpHandler(resourceConfigContainer, "/");

让您告诉服务器在ResourceConfig哪里可以找到您的动态资源,在我的例子中是“com.danny.resources”。它还允许您注册 hk2 绑定器,这些绑定器将用于将这些资源注入您的代码中。

希望这有助于一路走来,我希望 hk2/Jersey 2.0 提供更多示例!

于 2013-07-24T14:23:28.287 回答