有没有办法让 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 可见。
我正在尝试遍历所有由接口 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 可见。