
上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)