@ user2473992 Если вы используете мост Guice-HK2, вы можете получить ресурс с областью запроса, но если вы используете второе решение, тогда единственный вариант - использовать одноэлементный ресурс. Вот некоторые из ограничений, связанных со вторым вариантом.
я есть простой проект REST API с использованием Jersey 2.x. Я пытался использовать Google Guice для ввода своих зависимостей, но, похоже, это не работает. Я получаю эту ошибку:
org.glassfish.hk2.api.UnsatisfiedDependencyException: в SystemInjecteeImpl не было объекта, доступного для внедрения (requiredType = AccountService, parent = AccountsResource, qualifiers = {}, position = 0, необязательно = false, self = false, unqualified = null, 1658198405 )
У меня есть этот простой класс ресурсов
@Path("/accounts")
@Produces(MediaType.APPLICATION_JSON)
public class AccountsResource {
private final AccountService accountService;
@Inject
public AccountsResource(AccountService accountService) {
this.accountService = accountService;
}
@GET
@Path("test")
public String test() {
return this.accountService.test();
}
Я хочу внедрить этот сервис в свой класс ресурсов
public class AccountService {
public AccountService() {}
public String test() {
return "test";
}
}
Итак, следуя руководству Guice, я создал этот класс модуля
import com.google.inject.*;
public class AccountsResourceModule extends AbstractModule {
@Override
protected void configure() {
bind(AccountService.class);
}
}
Наконец, я добавил инжектор в мой основной метод
public class TradingServer implements Runnable {
private static final int PORT = 8181;
public static void main(String[] args) {
Injector injector = Guice.createInjector(new AccountsResourceModule());
AccountsResource accountsResource = injector.getInstance(AccountsResource.class);
new TradingServer().run();
}
public void run() {
Server server = new Server(PORT);
ServletContextHandler contextHandler = new ServletContextHandler(server, "/");
ResourceConfig packageConfig = new ResourceConfig().packages("ca.ulaval.glo4002.trading");
ServletContainer container = new ServletContainer(packageConfig);
ServletHolder servletHolder = new ServletHolder(container);
contextHandler.addServlet(servletHolder, "/*");
try {
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.destroy();
}
}
}
Когда я звоню на свой сервер, я получаю ошибку, упомянутую выше. Кажется, что внедрение зависимости не сработало. Пожалуйста помоги