簡體   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