org.glassfish.hk2.api.UnsatisfiedDependencyException: 在 SystemInjecteeImpl 中没有可用于注入的对象

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl

我尝试使用 Jersey 2.0/HK2 构建示例 RESTful 应用程序。初始提交(如 https://github.com/venkatramachandran/restful-sample-tomcat/commit/6e5ee 所示)应该有效,因为要注入的 class 已用 @Service 注释。但这没有。

我使用 org.glassfish.jersey.server.ResourceConfig 实例创建了第二个提交(https://github.com/venkatramachandran/restful-sample-tomcat/commit/2ca30f),该实例注册了 org.glassfish.hk2.utilities.binding.AbstractBinder 的实例。活页夹基本上将我的 @Contract 绑定到 @Service,它们基本相同 class.

我的问题是,活页夹是 HK2 工作所必需的吗?还是我在初始提交中遗漏了一些导致 org.glassfish.hk2.api.UnsatisfiedDependencyException 的配置?

是的,您需要为 HK2 执行某种绑定才能为这样的标准 @Service 工作。为了避免必须在 Jersey 内绑定您的服务,您可能需要考虑桥接到外部 ServiceLocator 以提供您的服务,如 this question.

中所述

当然,您的 @Contracts 通常最好的做法是接口,尽管显然不是强制性的。