更新到v2.27后,Jersey HK2依赖项注入功能不起作用

时间:2018-07-06 20:20:49

标签: java dependency-injection jersey jax-rs hk2

我有一个使用Jersey v2.25.1的项目。我使用Jersey的内置HK2注入执行依赖项注入,并且一切正常。快进到现在,我决定更新到Jersey v2.27。

运行项目时,出现以下异常:

java.lang.IllegalStateException: InjectionManagerFactory not found

在进行一些谷歌搜索之后,我发现我需要添加jersey-hk2依赖项。这样做使我得到以下异常:

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=<MyClass>,parent=<MyClass>,qualifiers={},position=0,optional=false,self=false,unqualified=null,1044705957)

将我的所有依赖关系还原到Jersey v2.25.1后,一切正常。我该怎么做才能解决这些错误,以便可以使用Jersey v2.27?

编辑: 我不使用Maven,所以我不能真正发布pom.xml,但是明天我将把MVCE与我所拥有的确切依赖关系以及一个依赖注入的基本示例放在一起。

1 个答案:

答案 0 :(得分:1)

Paul Samsotha在评论中回答

  

尝试更改您的AbstractBinder导入。有两种,分别是球衣1和HK2。尝试使用球衣1。

基本上,我需要更改从中实现的AbstractBinder类

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Error</title>
    </head>
    <body>
        <pre>hello, express</pre>
    </body>
</html>

org.glassfish.hk2.utilities.binding.AbstractBinder

区别在于Jersey在版本2.26中将HK2与其内部DI机制解耦,因此,我需要使用直接来自Jersey而不是HK2的新AbstractBinder导入。

API之间存在一些差异:例如,org.glassfish.jersey.internal.inject.AbstractBinder 代替了Factory<T>,而使用了bindFactory()