我正在尝试迭代由接口(interface) Bar
注释的所有类,使用 Guice 的 Injector.createInstance
初始化它们,并将它们注册到 Dropwizard Jersey 服务器.
但是,Guice 的 Injector.createInstance
方法似乎放弃了 JAX-RS 以及每个类上的自定义注释。由于某种原因,Guice 唯一保留的是 @MediaType
注释。 @Path
注释丢失,导致 Jersey 无法正确处理 HTTP 请求。
有没有办法强制 Guice 将这些类上的所有现有注释保留在其自己生成的实现中?请注意,注入(inject)器未配置为专门处理 Foo
的实例,但 Foo
的构造函数已标记为注入(inject)。
最佳答案
Guice doesn't support this (yet)
Guice 有一个 open issue on this topic十多年来,这个问题一直没有得到解决,而且可能永远不会得到解决。
唯一的解决方法是使用 @Inherited
对您的注释进行注释。
但是您提到您使用现有注释,而不是自定义注释,所以让我们检查一下它们:@Consumes
是@Inherited
(太棒了!),@Produces
也是如此。 (也很棒!),但是 @Path
不是(嘘!),所以您的 Guice 代理上确实不存在 @Path
。
我能给你的唯一建议是摆脱你的 Guice-AOP (TypeListener)。如果你能做到这一点,那么你很可能不会有任何 Guice 代理,并且你的方法将位于顶部对象上,因此对 Jersey 可见。
关于java - 有没有办法让 Guice 保留注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55467417/