Jersey HK2 依赖注入在更新到 v2.27 后不起作用

vik*_*mun 3 java dependency-injection jax-rs jersey hk2

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

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

java.lang.IllegalStateException: InjectionManagerFactory not found
Run Code Online (Sandbox Code Playgroud)

经过一番谷歌搜索,我发现我需要添加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)
Run Code Online (Sandbox Code Playgroud)

将我的所有依赖项恢复到 Jersey v2.25.1 后,一切正常。我需要做什么来修复这些错误,以便我可以使用 Jersey v2.27?

编辑:我不使用 Maven,所以我不能真正发布一个pom.xml.

vik*_*mun 5

Paul Samsotha在评论中的回答:

尝试更改您的 AbstractBinder 导入。有两种,一种是泽西岛一种,一种是 HK2。尝试使用泽西岛。

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

org.glassfish.hk2.utilities.binding.AbstractBinder
Run Code Online (Sandbox Code Playgroud)

org.glassfish.jersey.internal.inject.AbstractBinder
Run Code Online (Sandbox Code Playgroud)

不同之处在于 Jersey 在 2.26 版本中将 HK2 与其内部 DI 机制分离,因此,我需要使用新的 AbstractBinder 导入,它直接来自 Jersey,而不是 HK2。

有一些 API 差异:例如,不是 a Factory<T>,而是bindFactory()采用java.util.function.Supplier<T>.