我试图迭代所有由接口Bar
注释的类,用Guice的Injector.createInstance
初始化它们,并用Dropwizard Jersey服务器注册它们。
然而,Guice的Injector.createInstance
方法似乎丢弃了JAX-RS以及每个类的自定义注释。出于某种原因,Guice保留的唯一内容是@MediaType
注释。 @Path
注释丢失,这会阻止Jersey正确处理HTTP请求。
有没有办法强制Guice在自己生成的实现中保留这些类的所有现有注释?请注意,注入器未配置为专门处理Foo
的实例,但Foo
的构造函数标记为注入。
Guice有一个open issue on this topic超过10年,它没有解决,可能永远不会。
唯一的解决方法是在注释上使用@Inherited
注释。
但是你提到你使用现有的注释,而不是自定义注释,所以让我们检查它们:@Consumes
是@Inherited
(太棒了!),@Produces
(也很棒!)也是如此,但是@Path
不是(booh!),所以确实@Path
不是' t出现在你的Guice代理上。
我能给你的唯一建议是摆脱你的Guice-AOP(TypeListener)。如果你能做到这一点,那么你很可能没有任何Guice代理,你的方法将在top对象上,因此对Jersey可见。