@ 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();
    }
}

}

Когда я звоню на свой сервер, я получаю ошибку, упомянутую выше. Кажется, что внедрение зависимости не сработало. Пожалуйста помоги

Ответы на вопрос(1)

Ваш ответ на вопрос