有没有办法让 Guice 保留注释?

Is there a way to cause Guice to preserve annotations?

我正在尝试遍历所有由接口 Bar 注释的 classes,用 Guice 的 Injector.createInstance 初始化它们,并用 Dropwizard Jersey 服务器注册它们。

但是,Guice 的 Injector.createInstance 方法似乎丢弃了 JAX-RS 以及每个 class 上的自定义注释。出于某种原因,Guice 唯一保留的是 @MediaType 注释。 @Path 注释丢失,导致 Jersey 无法正确处理 HTTP 请求。

有没有办法强制 Guice 在其自己生成的实现中保留这些 classes 上的所有现有注释?请注意,注入器未配置为专门处理 Foo 的实例,但 Foo 的构造函数被标记为注入。

Guice doesn't support this (yet)

Guice 有一个 open issue on this topic 超过 10 年的问题,它没有得到解决,而且可能永远不会得到解决。

唯一的解决方法是在注释中使用 @Inherited 注释。

但是你提到你使用现有的注释,而不是自定义注释,所以让我们检查一下:@Consumes is @Inherited (great!), and so is @Produces (also great!), but @Path 不是(糟糕!),所以 @Path 确实不存在于你的 Guice 代理上.

我能给你的唯一建议是去掉你的 Guice-AOP (TypeListener)。如果你能做到这一点,那么你很可能不会有任何 Guice 代理,你的方法将在顶部对象上,因此对 Jersey 可见。