Guice não injeta os recursos de Jersey
Analisado em toda a Internet, mas não consigo descobrir por que isso acontece. Eu tenho um projeto mais simples possível (sobre o arquétipo jersey-quickstart-grizzly2) com um recurso de Jersey. Estou usando o Guice como DI porque o CDI também não quer trabalhar com Jersey. O problema é que Guice não pode resolver a classe a ser usada ao injetar nos recursos de Jersey. Funciona muito bem lá fora, mas não com Jersey. Aqui está o recurso de Jersey:
import com.google.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("api")
public class MyResource {
private Transport transport;
@Inject
public void setTransport(Transport transport) {
this.transport = transport;
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return transport.encode("Got it!");
}
}
Interface de transporte:
public interface Transport {
String encode(String input);
}
E é realização:
public class TransportImpl implements Transport {
@Override
public String encode(String input) {
return "before:".concat(input).concat(":after");
}
}
Seguindo o manual GettingStarted do Google, eu herdeiAbstractModule
e vinculei minhas aulas assim:
public class TransportModule extends AbstractModule {
@Override
protected void configure() {
bind(Transport.class).to(TransportImpl.class);
}
}
Eu recebo injetormain()
com isso, mas realmente não precisa disso aqui:
Injector injector = Guice.createInjector(new TransportModule());
Aliás, não há problema quando tento fazer algo assim:
Transport transport = injector.getInstance(Transport.class);