我有一个使用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与我所拥有的确切依赖关系以及一个依赖注入的基本示例放在一起。
答案 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()
。