有没有办法使Guice保存注释?

时间:2019-04-02 05:18:58

标签: java annotations jax-rs guice

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

但是,Guice的Injector.createInstance方法似乎放弃了JAX-RS以及每个类的自定义注释。由于某些原因,Guice唯一保留的是@MediaType注释。 @Path注释丢失了,这阻止了Jersey正确处理HTTP请求。

是否有一种方法可以强制Guice在自己生成的实现中保留这些类上的所有现有注释?请注意,没有将注入器配置为专门处理Foo的实例,但是Foo的构造函数已标记为注入。

1 个答案:

答案 0 :(得分:2)

Guice doesn't support this (yet)

Guice拥有open issue on this topic已有10多年了,它尚未解决,可能永远不会解决。

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

但是您提到您使用的是现有注释,而不是自定义注释,因此让我们检查一下:@Consumes@Inherited(太好了!),@Produces也很(还不错!),但是@Path不是(嘘!),因此@Path确实不在您的Guice代理中。

我唯一能给您的建议就是摆脱Guice-AOP(TypeListener)。如果可以做到这一点,那么您很可能将没有任何Guice代理,并且您的方法将位于顶部对象上,因此对于Jersey而言是可见的。