我刚开始使用Jersey 2创建REST Web服务。我已经成功地完成了一些简单的案例,现在我要开始进行“真正”的工作。
我创建了自己的ResourceConfig
实例,并用Guice返回的REST控制器实例填充了ResourceConfig
实例:
<!-- language: lang-java -->
final ResourceConfig rc = new ResourceConfig();
//register an *instance* of a REST controller
rc.register(injector.getInstance(MyRestController.class));
请注意,由于这些REST控制器实例是由Guice提供的,因此这些实例将被填充标有
@Inject
注释的所有必要依赖项。然而,当我运行上述代码引导Jersey时,我会看到以下错误:
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(....
显然,发生的情况是,Jersey 也试图解决 REST 控制器实例上的 @Inject 依赖关系,因为它看到了和 Guice 相同的 @Inject 注释。
我不希望 Jersey 进行任何依赖注入。我认为有从 Jersey 到 Guice 的桥接,但基于此处无法展示的程序要求,我需要自己创建 REST 控制器实例并向 Guice Injector 请求它们。
我的问题是:如何在 Jersey 中禁用依赖注入?
我目前正在使用 javax.inject.Inject 注释。也许我可以改用 com.google.inject.Inject 注释,认为 Jersey 不会查找这些注释。但是,我宁愿关闭 Jersey 中的依赖注入。我该怎么办?
谢谢!
com.google.inject.Inject
注释而不是标准的javax.inject.Inject
注释。然而,我仍然想要一个基于 Jersey 的解决方案。在我的特定情况下,上面代码中的JerseyEnvironment
实际上是ResourceConfig
的一个实例,但所有必要的方法都存在。奇怪的是 Jersey 没有一个禁用 DI 的开关。同时也很奇怪一个类被绑定到了一个实例上;通常情况下是反过来的。无论如何,谢谢! - user3303372