[英]Jersey HK2 Dependency Error
我正在使用Jersey创建RESTful Web服务。 我还使用通过Java main方法运行的Jetty嵌入式Web服务器。 默认情况下,Jersey附带HK2 DI。 我在该服务的依赖项注入方面遇到了问题:
Aug 09, 2017 4:16:30 PM org.glassfish.jersey.internal.Errors logErrors
WARNING: The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 3
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=HelloService,parent=HelloResource,qualifiers={},position=-1,optional=false,self=false,unqualified=null,18651401)
我在Stackoverflow中已经看过一些教程并已经回答了问题,但是看来我的工作仍然存在依赖注入问题。
我有以下代码:
package hello.config;
...
public class ApplicationResourceConfig extends ResourceConfig {
public ApplicationResourceConfig() {
packages("hello.resource");
register(ApplicationBinder.class);
register(JacksonFeature.class);
}
}
package hello.config;
...
public class ApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bind(HelloServiceImpl.class).to(HelloService.class).in(RequestScoped.class);
bind(HelloDaoImpl.class).to(HelloDao.class).in(RequestScoped.class);
}
}
package hello.resource;
...
@Path("/hello")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class HelloResource {
@Inject
private HelloService helloService;
@GET
@Path("world")
public String world() {
return helloService.hello();
}
}
package hello.service;
...
@Contract
public interface HelloService {
void hello();
}
package hello.service;
...
@Service
@Named
public class HelloServiceImpl implements HelloService {
@Inject
private HelloDao helloDao;
@Override
public String hello(hello) {
helloDao.hello();
}
}
package hello.dao;
...
@Contract
public interface HelloDao {
String hello();
}
package hello.dao;
...
@Named
public interface HelloDaoImpl {
public String hello() {
return "Hello, world!";
}
}
package hello;
...
public class Server {
private static final int DEFAULT_PORT = 8080;
private static final String DEFAULT_CONTEXT_PATH = "/myapp";
private static final String DEFAULT_MAPPING_URL = "/*";
public static void main(String[] args) {
Server server = new Server(port(args));
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContextHandler.setContextPath(DEFAULT_CONTEXT_PATH);
servletContextHandler.addServlet(new ServletContainer(new ApplicationResourceConfig()), DEFAULT_MAPPING_URL);
server.setHandler(servletContextHandler);
server.start();
LOGGER.info("Server started at port {}", port);
server.join();
}
public static int port(String[] args) {
if (args.length > 0) {
String port = args[0];
try {
return Integer.valueOf(port);
} catch (NumberFormatException exception) {
LOGGER.error("Invalid port number {}", port);
}
return DEFAULT_PORT;
}
}
谢谢。
您不能将ApplicationBinder
注册为类 。 需要将其注册为实例 。
register(new ApplicationBinder());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.