我在java中的各种CDI限定符中看到的值()是什么?
发布时间:2020-12-15 04:10:15 所属栏目:Java 来源:网络整理
导读:我在@Qualifier定义中看到了对values()的各种引用. 我理解@Qualifier是一个标记系统,但你将它们定义为一个接口. 一个接口可以允许枚举,但我不明白我在下面列出的两个不相关的例子中看到的单词values(). 你可以向我解释一下value()这个词是什么意思吗? @Qual
我在@Qualifier定义中看到了对values()的各种引用.
我理解@Qualifier是一个标记系统,但你将它们定义为一个接口. 一个接口可以允许枚举,但我不明白我在下面列出的两个不相关的例子中看到的单词values(). 你可以向我解释一下value()这个词是什么意思吗? @Qualifier @Retention(RUNTIME) @Target({FIELD,TYPE,METHOD}) public @interface NumberOfDigits { Digits value(); } public enum Digits { TWO,EIGHT,TEN,THIRTEEN } package com.byteslounge.bean; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.inject.Qualifier; @Qualifier @Retention(RUNTIME) @Target({FIELD,METHOD}) public @interface MessageTransport { MessageTransportType value(); } 解决方法
这些不是接口.这些是
annotations.可以在注释上声明静态信息并对其进行注释.然后,检查注释的代码可以利用此信息.
声明为Qualifier的注释允许CDI disambiguate between implementations of the same type. 考虑限定符Foo: @Qualifier @Retention(RUNTIME) @Target({FIELD,METHOD}) public @interface Foo { int value(); } 用Foo注释的类型: @Foo(1) public class Bar implements Runnable { //...impl @Foo(2) public class Baz implements Runnable { //...impl 一个CDI bean: public class Bean { @Inject @Foo(1) Runnable a; @Inject @Foo(2) Runnable b; //...impl 这里,a将被解析为Bar的实例,而b将被解析为Baz的实例. 如果没有限定符注释,CDI API将无法告知要注入哪个Runnable实例.所有值必须完全匹配. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java-计算递归方法中可以除以2的元素
- 未使用的局部变量Java 8 – java.lang.VerifyError:不一致
- java.util.Date计算天数差异
- JMeter的JavaRequest探究
- 在Java中声明BigDecimal Array的初始值
- 异步I / O – Java
- java – Android Google Maps V2 – Sd卡作为Tile Provider
- java – 我们在堆的PermGen区域中是否有所有原始类型的池?
- 【SpringBoot】05.SpringBoot整合Listener的两种方式
- javafx8 TableView Multiselection将所选项之一返回为null