为什么 Quarkus 警告我在私有领域注入?

geo*_*and 10 quarkus

当我在 Quarkus 应用程序中使用类似以下内容时:

@Path("v1")
@Produces(APPLICATION_JSON)
public class HelloWorldResource {

   @Inject 
   private SomeBean someBean;
}
Run Code Online (Sandbox Code Playgroud)

然后我在构建过程中收到以下警告。

[INFO] [io.quarkus.arc.processor.BeanProcessor] Found unrecommended usage of private members (use package-private instead) in application beans:
    - @Inject field acme.jaxrs.v1.HelloWorldResource#someBean
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好,那么为什么 Quarkus 建议更改privatepackage-private

geo*_*and 17

如果属性是package-private,Quarkus 可以直接注入它,而无需任何反射发挥作用。

这就是为什么 Quarkus 推荐package-private成员进行注入,因为它试图尽可能避免反射(原因是更少的反射意味着更好的性能,这是 Quarkus 努力实现的目标)。

有关更多详细信息,请参阅指南的第 2 部分。

  • 对于包 private(仍然)不受支持的可见性修饰符的 Kotlin 类,您建议我们做什么?示例 `class ReactiveGreetingResource(@Inject var service: ReactiveGreetingService)`。甚至可能是“BeanProcessor”中的一个错误,因为它抱怨“私有成员”,而实际上它是公共的? (2认同)