2013-07-03 5 views
0

Guice를 사용하여 리소스 클래스의 생성자를 삽입하려고합니다. 한편 나는 GrizzlyWebServer를 리소스 클래스에서 reqquest를 처리하는 서버로 사용했습니다. 아래에는 코드 및 오류가 있습니다.저지에서 생성자 주입하기

GoogleModule 클래스 :

public class GoogleModule extends AbstractModule { 

    @Override 
    protected void configure() { 
    bind(Interface.class).to(Implementation.class); 
    } 
} 

자원 클래스

@Path("/path") 
public class ResourceClass { 
    Logger log = LoggerFactory.getLogger(ResourceClass.class); 
    private final Interface interface; 

    GConnection con = new GConnection(); 

    @Inject 
    public ResourceClass(Interface interface) { 
    this.interface = interface; 
    } 

    @GET 
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    public List<Object> getObjects() { 
    return interface.list(); 
    } 
} 

내가이 문을 호출했습니다 그리즐리 서버를 시작하기 전에

.

Injector injector = Guice.createInjector(new GoogleModule()); 
webserver.startServer(); 

이 설정 후 다음 오류가 발견되었습니다.

SEVERE: Missing dependency for constructor public  com.motilink.services.ResourceClass(Interface) at parameter index 0 
Jul 3, 2013 9:52:36 AM com.sun.grizzly.http.servlet.ServletAdapter doService 
SEVERE: service exception: 
com.sun.jersey.spi.inject.Errors$ErrorMessagesException 
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 
at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) 
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765) 
at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:489) 
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319) 
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) 
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) 
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374) 
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557) 
at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
at com.sun.grizzly.http.servlet.ServletAdapter.loadServlet(ServletAdapter.java:451) 
at com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:390) 
at com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:347) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapterChain.service(GrizzlyAdapterChain.java:186) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166) 
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:824) 
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:721) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1014) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:220) 
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 
at com.sun.grizzly.ContextTask.run(ContextTask.java:69) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:530) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:511) 
at java.lang.Thread.run(Thread.java:680) 
+0

Guice가 저지와 함께 생성자를 삽입 할 수 있는지 확신하지 못합니다. 대신 필드 주입으로 전환하십시오. – condit

답변

0

는 자원을 주입하여 만든 것이 아니라, 인스턴스를 직접되도록 Guice 올바르게에 중독되어 있는지 확인해야합니다 당신이 서블릿을 통해 실행중인 점을 감안. 이제 코드가있는 방식으로 인젝터가 리소스의 새 인스턴스를 생성하는 데 사용되지 않으므로 오류가 발생합니다.

Guice Wiki에 설정하는 방법에 대한 자세한 내용이 있습니다.

+0

고마워.하지만 해결 했어. 나는 서버쪽에 인젝터가있는 어댑터를 추가하는 것을 잊는다 !! –