2015-01-24 8 views
0

내 프로젝트에 Guice (v3.0)을 도입하려고합니다. 나는 임베디드 tomcat (v7.0.34)와 Jersey (v1.18)를 사용하여 휴식 서비스를 제공하고 있습니다. Tomcat이 내장 된 Guice 서블릿

은 Guice 의존성 주입을 소개하기 전에 나는이 괜찮 았는데 다음과 같은 구성

//Main Class 
Context context = tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath()); 
    tomcat.addServlet(context, "Jersey REST Service", new ServletContainer(new DefaultResourceConfig(EntityResource.class))); 
    context.addServletMapping("/rest/*", "Jersey REST Service"); 
    tomcat.start(); 
    tomcat.getServer().await(); 


//EntityResource 
@Path("entity") 
public class EntityResource {  
final EntityService entityService; 
public EntityResource() 
{ 
    this.entityService = new EntityService(); 
} 

@Path("") 
@Produces("application/json") 
@GET 
public Entity getEntity(){ 
    return entityService.getEntity(); 
} 

했다. 나는/rest/entity에서 GET을 할 수 있었다.

final EntityService entityService; 
@Inject 
public EntityResource(EntityService entityService) 
{ 
    this.entityService = entityService; 
} 

@Path("") 
@Produces("application/json") 
@GET 
public Entity getEntity() { 
    return entityService.getEntity(); 
} 

이 파라미터에 (com.my.service.EntityService) 생성자 공개 com.my.rest.EntityResource 대한 종속성 누락 오류 "를주는 것 같습니다 EntityResource하는 Guice 생성자 주입을 첨가 한 후 색인 0 ". 나는 Guice의 생성자 주입 때문에 이것이라고 짐작하고있다. web.xml에

답변

2

추가 서블릿은 여전히 ​​web.xml을하지 않고이 작업을 수행하는 방법을 찾고

//MyServletListener 
public class MyServletListener extends GuiceServletContextListener { 
@Override 
public Injector getInjector() { 
    return Guice.createInjector(new JerseyServletModule(){ 
     @Override 
     protected void configureServlets() { 
      bind(EntityResource.class); 
       bind(EntityService.class).to(com.my.impl.EntityService.class).in(Singleton.class); 
      serve("/rest/*").with(GuiceContainer.class); 
     } 
    }); 
} 
} 

//web.xml 
<web-app> 
<filter> 
<filter-name>guiceFilter</filter-name> 
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
</filter> 

<filter-mapping> 
<filter-name>guiceFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

<listener> 
<listener-class>com.my.servlet.MyServletListener</listener-class> 
</listener> 

일을했다.