Jersey HK2 依赖注入在更新到 v2.27 后不起作用
Jersey HK2 Dependency Injection doesn't work after update to v2.27
我有一个使用 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,所以我真的不能 post pom.xml
,但明天我将把一个 MVCE 与我拥有的确切依赖关系放在一起,以及一个依赖注入的基本示例。
Paul Samsotha 在评论中回答:
Try to change your AbstractBinder import. There are two, a Jersey one and an HK2 one. Try to use the Jersey one.
基本上,我需要更改我从
实现的 AbstractBinder class
org.glassfish.hk2.utilities.binding.AbstractBinder
至
org.glassfish.jersey.internal.inject.AbstractBinder
区别在于 Jersey 在 2.26 版本中将 HK2 与其内部 DI 机制分离,因此,我需要使用新的 AbstractBinder 导入,它直接来自 Jersey,而不是 HK2。
有一些 API 差异:例如,bindFactory()
不是 Factory<T>
,而是 java.util.function.Supplier<T>
。
我有一个使用 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,所以我真的不能 post pom.xml
,但明天我将把一个 MVCE 与我拥有的确切依赖关系放在一起,以及一个依赖注入的基本示例。
Paul Samsotha 在评论中回答:
Try to change your AbstractBinder import. There are two, a Jersey one and an HK2 one. Try to use the Jersey one.
基本上,我需要更改我从
实现的 AbstractBinder classorg.glassfish.hk2.utilities.binding.AbstractBinder
至
org.glassfish.jersey.internal.inject.AbstractBinder
区别在于 Jersey 在 2.26 版本中将 HK2 与其内部 DI 机制分离,因此,我需要使用新的 AbstractBinder 导入,它直接来自 Jersey,而不是 HK2。
有一些 API 差异:例如,bindFactory()
不是 Factory<T>
,而是 java.util.function.Supplier<T>
。