如何在HK2中注入未绑定的泛型类型?

问题描述 投票:1回答:1

我正在使用Jersey 2.9编写Web服务,我也使用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中不可能指定这样的约束?

最好的祝福, 安德烈亚斯

java generics jersey-2.0 hk2
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.