为啥 Quarkus 会警告我关于私有字段的注入?

Posted

技术标签:

【中文标题】为啥 Quarkus 会警告我关于私有字段的注入?【英文标题】:Why does Quarkus warn me about injection in private fields?为什么 Quarkus 会警告我关于私有字段的注入? 【发布时间】:2019-08-01 17:19:52 【问题描述】:

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

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

   @Inject 
   private SomeBean someBean;

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

[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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

对于包 private (仍然)不受支持的可见性修饰符的 Kotlin 类,您建议我们做什么?例如class ReactiveGreetingResource(@Inject var service: ReactiveGreetingService)。甚至可能是BeanProcessor 中的一个错误,因为它抱怨“私人成员”,而实际上它是公开的? 是的,这是一个错误的警告。请打开一个问题 我同时找到了github.com/quarkusio/quarkus/issues/10640,您在其中解决了这个问题。 要使属性private-package,只需删除“private”修饰符即可。 @GeraldScott 在 Kotlin 中,没有修饰符会使属性公开。 Kotlin 中没有私有包。

以上是关于为啥 Quarkus 会警告我关于私有字段的注入?的主要内容,如果未能解决你的问题,请参考以下文章

quarkus依赖注入之一:创建bean

使用 kotlin + quarkus 注入一些依赖项时出错

为啥会有关于 VIEW_COLUMN_USAGE.VIEW_SCHEMA 的警告?

为啥这个私有模板函数会编译? -> 编译器错误 VS 2009

如何停止有关未使用的私有字段的警告?

为啥伴随对象不使用 JUnit 测试作为私有字段进行测试?