[英]Jersey with embedded Jetty resolving dependency injection in Resource
在尝试注入我的资源的依赖项时,我很难将Jetty与Jersey联系起来。 我正在做的是:
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(new MyBinder());
}
}
我的资料夹简化了:
public class MyBinder extends AbstractBinder {
@Override
protected void configure() {
bind(ManagerImpl.class).to(Manager.class);
}
}
我的资源得到简化:
@Path("test")
public class MyResource {
@Inject
Manager manager;
...
}
我尝试将所有这些联系在一起:
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
ServletContainer jerseyServletContainer = new ServletContainer(new MyApplication());
ServletHolder jerseyServletHolder = new ServletHolder(jerseyServletContainer);
jerseyServletHolder.setInitParameter("jersey.config.server.provider.classnames", MyResource.class.getCanonicalName());
servletContextHandler.setContextPath("/");
servletContextHandler.addServlet(jerseyServletHolder, "/*");
Server server = new Server(threadPool);
ServerConnector connector = new ServerConnector(server);
connector.setPort(httpPort);
server.setConnectors(new Connector[]{connector});
server.setHandler(servletContextHandler);
server.start();
但是我一直收到HTTP错误:404
有什么想法可以对它进行排序吗?
谢谢
好的,我也可以在没有dropwizard和guice的情况下使它工作。 由于某些原因,Jersey实现自版本2.XX起不包含GuiceComponentProviderFactory。 否则,可以执行以下操作:
Injector injector = Guice.createInjector( new ServletModule() { ...} );
IoCComponentProviderFactory ioc = new GuiceComponentProviderFactory( resourceConfig, injector );
Server server = JettyHttpContainerFactory.createHttpServer( BASE_URI + "services/", resourceConfig, ioc );
从版本2.X开始,他们已经将HK2 IoC框架与GuiceBirdge集成在一起,因此您需要弄混HK2和Guice:
GuiceBridge.getGuiceBridge().initializeGuiceBridge(aServiceLocator);
因此,我暂时坚持以这种方式将HK2连接在一起:
URI baseUri = UriBuilder.fromUri("http://localhost/").port(8800).build();
Server server = JettyHttpContainerFactory.createServer( baseUri, new MyApplication() );
server.start();
我的ResourceConfig:
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(new MyBinder());
register(MyResource.class);
}
}
因此,我只是错过了在注册我的资料夹之外注册我的资源的机会。 因此,以这种方式,我完全没有使用web.xml并拥有很好的嵌入式码头服务器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.