Guice не впрыскивает ресурсы Джерси
Разобрался по всему интернету, но не могу понять, почему это происходит. У меня есть простейший проект (поверх архетипа jersey-quickstart-grizzly2) с одним ресурсом Джерси. Я использую Guice в качестве DI, потому что CDI тоже не хочет работать с Джерси. Проблема в том, что Guice не может разрешить использование класса при инъекции в ресурсы Джерси. Снаружи отлично работает, но не с Джерси. Вот ресурс Джерси:
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!");
}
}
Транспортный интерфейс:
public interface Transport {
String encode(String input);
}
И это реализация:
public class TransportImpl implements Transport {
@Override
public String encode(String input) {
return "before:".concat(input).concat(":after");
}
}
Следуя инструкции Google GettingStarted, я унаследовалAbstractModule
и связал мои занятия следующим образом:
public class TransportModule extends AbstractModule {
@Override
protected void configure() {
bind(Transport.class).to(TransportImpl.class);
}
}
Я получаю инжектор вmain()
с этим, но на самом деле это не нужно здесь:
Injector injector = Guice.createInjector(new TransportModule());
Кстати, нет проблем, когда я пытаюсь сделать что-то вроде этого:
Transport transport = injector.getInstance(Transport.class);