Quarkus实战:专为Kubernetes而优化的Java解决方案
上QQ阅读APP看书,第一时间看更新

5.10 使用命名限定符

问题

如何用名字限定一个注解?

解决方案

使用@javax.inspit.Named注解。

在CDI中,限定符(qualifier)是任何定义为@Retention(RUNTIME)并使用@javax.inject.Qualifier的注解。限定符通常被定义在需要使用它们的地方,如@Target({METHOD,FIELD,PARAMETER,TYPE})。

CDI自带了一个有用的限定符:@javax.inject.Named,它的值并不是必需的,但是在没有实际名字的情况下使用@Named是没有意义的。当解析一个注解时,CDI将寻找任何同样包含相同限定符的正确类型的bean。在有@Named的情况下,注解的值部分也必须匹配。

如果你有多个类型实例,但它们不是同一个对象,这个时候@Named就非常有用。CDI并不会考虑对象的实际实例,因为在对象被创建之前,它是不知道的,而且每次都会有所不同。为了解决这个问题,CDI使用了限定符:

讨论

一个完整的生成命名bean的示例:

限定符@Named,虽然功能较弱——这也是CDI试图避免的事情之一——但在集成过程中是一个有用的技巧。我们建议在可能的情况下使用强类型的注解。

另见

更多的信息,请访问以下网页。

·JBoss:注入点的限定符&Named(https://oreil.ly/5NydQ