GuiceServletContextListener에서 guice로 묶인 저지 자원을 대체하는 메소드를 찾고 있습니다. 내가 작업을 얻으려고 내 코드 :저스 자원을 guice로 대체하십시오.
//Define Jersey resource interface
@Path("/books/{key}")
public interface BookDocument {
public BookDAO getDao();
public void setDao(BookDAO dao);
}
//Define default implementation
public class BookImpl implements Book {
@Override
public BookDAO getDao() {
return dao;
}
@Inject
@Override
public void setDao(BookDAO dao) {
this.dao = dao;
}
}
//User wants to inject his implementation, so he define it
public class BookUserImpl implements Book {
@Override
public BookDAO getDao() {
return dao;
}
@Inject
@Override
public void setDao(BookDAO dao) {
this.dao = dao;
}
}
//Inject default implementation of resource
public class ApplicationResourcesModule extends AbstractModule
{
@Override
protected void configure()
{
bind(Book).to(BookImpl);
}
}
//But user wants to inject his implementation, so he bind it in users AbstractModule
public class ApplicationResourcesModuleUser extends AbstractModule
{
@Override
protected void configure()
{
bind(Book).to(BookUserImpl);
}
}
//Bind all resources
public class JerseyGuiceConfig extends GuiceServletContextListener
{
@Override
protected Injector getInjector()
{
//Override default binding by user bindings.
return Guice.createInjector(Modules.override(new ApplicationResourcesModule()).with(new ApplicationResourcesModuleUser()), new JerseyServletModule());
}
}
하지만, 구현 인터페이스처럼 guice 만 bind(BookImpl.class)
작업의를 저지 자원을 결합 할 수는 없지만 불행하게도이 작동하지 않습니다. 그러나 이러한 바인딩은 덮어 쓰기가 불가능합니다. 을 bind(BookUserImpl.class)
으로 다시 정의하려고 시도하면 오류가 Conflicting URI templates. The URI template /books/{key} for root resource class.
인 반면 @Path는 고유해야합니다. 내 유스 케이스에 대한 해결책이 있습니까?