How to inject an unbound generic type in HK2?

佐手、 提交于 2019-12-13 01:25:26

问题


I'm writing a webservice using Jersey 2.9 and I'm also using HK2 for DI. I have a class which handles a connection to a database which can be instantiated like that:

public class DBHandler {
  private DBConnection<?> dbConnection;

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

As you can see, field dbConnection has an unbounded generic type. By binding implementation currently looks like follows:

public class MyProductionBinder extends AbstractBinder {

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

Howevery, during runtime the following exception is thrown;

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)

If I turn the variable declaration in DBHandler into a raw type like this:

public class DBHandler {
  private DBConnection dbConnection;

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

it works like expected.

Do I miss something or is it not possible in HK2 to specify such a binding?

Best regards,
Andreas


回答1:


HK2 uses the same rules for type matching that CDI does, which does mean that your use case of injecting DBConnection will NOT work while just using DBConnection will work. If this is an important enough use case for you enter a Jira and we can think about having HK2 deviate from the CDI rules for this case. I also think that DBConnection would also work.



来源:https://stackoverflow.com/questions/23992714/how-to-inject-an-unbound-generic-type-in-hk2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!