繁体   English   中英

泽西岛HK2依赖错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM