Java Guice DI error: UnsatisfiedDependencyException: não havia nenhum objeto disponível para injeção no SystemInjecteeImpl
Eu tenho um projeto simples da API REST usando o Jersey 2.x. Tentei usar o Google Guice para injetar minhas dependências, mas parece não funcionar. Eu recebo este erro:
org.glassfish.hk2.api.UnsatisfiedDependencyException: não havia objeto disponível para injeção no SystemInjecteeImpl (requiredType = AccountService, parent = AccountsResource, qualificadores = {}, position = 0, opcional = false, self = false, não qualificado = null, 1658198405)
Eu tenho essa classe de recurso simples
@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();
}
Quero injetar esse serviço na minha classe de recurso
public class AccountService {
public AccountService() {}
public String test() {
return "test";
}
}
Assim, seguindo o guia do Guice, criei esta classe de módulo
import com.google.inject.*;
public class AccountsResourceModule extends AbstractModule {
@Override
protected void configure() {
bind(AccountService.class);
}
}
Por fim, adicionei o injetor no meu método principal
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();
}
}
}
Quando ligo para o meu servidor, recebo o erro mencionado acima. Parece que a injeção de dependência não funcionou. Por favor ajud