为啥 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 会警告我关于私有字段的注入?的主要内容,如果未能解决你的问题,请参考以下文章
使用 kotlin + quarkus 注入一些依赖项时出错
为啥会有关于 VIEW_COLUMN_USAGE.VIEW_SCHEMA 的警告?