我正在尝试遍历接口Bar
注释的所有类,并用Guice的Injector.createInstance
初始化它们,并在Dropwizard Jersey服务器中注册它们。
但是,Guice的Injector.createInstance
方法似乎放弃了JAX-RS以及每个类的自定义注释。由于某些原因,Guice唯一保留的是@MediaType
注释。 @Path
注释丢失了,这阻止了Jersey正确处理HTTP请求。
是否有一种方法可以强制Guice在自己生成的实现中保留这些类上的所有现有注释?请注意,没有将注入器配置为专门处理Foo
的实例,但是Foo
的构造函数已标记为注入。
答案 0 :(得分:2)
Guice拥有open issue on this topic已有10多年了,它尚未解决,可能永远不会解决。
唯一的解决方法是在注释中使用@Inherited
注释。
但是您提到您使用的是现有注释,而不是自定义注释,因此让我们检查一下:@Consumes
是@Inherited
(太好了!),@Produces
也很(还不错!),但是@Path
不是(嘘!),因此@Path
确实不在您的Guice代理中。
我唯一能给您的建议就是摆脱Guice-AOP(TypeListener)。如果可以做到这一点,那么您很可能将没有任何Guice代理,并且您的方法将位于顶部对象上,因此对于Jersey而言是可见的。