1

我正在使用 Jersey 2.9 编写一个网络服务,并且我也在使用 HK2 进行 DI。我有一个类可以处理与数据库的连接,可以像这样实例化:

public class DBHandler {
  private DBConnection<?> dbConnection;

  @Inject
  public DBHandler(DBConnection<?> dbConnection) {
    this.dbConnection = dbConnection;
  }
}

如您所见,字段dbConnection具有无界的泛型类型。通过绑定实现目前如下所示:

public class MyProductionBinder extends AbstractBinder {

   @Override
   protected void configure() {
     bind(ClientServerDBConnection.class).to(new TypeLiteral<DBConnection<?>>() {});
   }
}

但是,在运行时会引发以下异常;

Caused by: org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=DBConnection<?>,parent=DBHandler,qualifiers={}),position=0,optional=false,self=false,unqualified=null,731556610)

如果我将变量声明DBHandler变成这样的原始类型:

public class DBHandler {
  private DBConnection dbConnection;

  @Inject
  public DBHandler(DBConnection dbConnection) {
    this.dbConnection = dbConnection;
  }
}

它按预期工作。

我是否遗漏了什么,或者在 HK2 中无法指定这样的绑定?

最好的问候,
安德烈亚斯

4

1 回答 1

2

HK2 使用与 CDI 相同的类型匹配规则,这确实意味着注入 DBConnection 的用例将不起作用,而仅使用 DBConnection 将起作用。如果这是一个足够重要的用例,您可以输入 Jira,我们可以考虑让 HK2 偏离该案例的 CDI 规则。我也认为 DBConnection 也可以。

于 2014-06-03T10:31:07.663 回答