我在java中的各种CDI限定符中看到的值()是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了我在java中的各种CDI限定符中看到的值()是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1536字,纯文字阅读大概需要3分钟。
内容图文
![我在java中的各种CDI限定符中看到的值()是什么?](/upload/InfoBanner/zyjiaocheng/744/248d7fe98e004b369dab0ce9f1d1410c.jpg)
我在@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, TYPE, METHOD})
public @interface MessageTransport {
MessageTransportType value();
}
解决方法:
这些不是接口.这些是annotations.可以在注释上声明静态信息并对其进行注释.然后,检查注释的代码可以利用此信息.
声明为Qualifier的注释允许CDI disambiguate between implementations of the same type.
考虑限定符Foo:
@Qualifier @Retention(RUNTIME) @Target({FIELD, TYPE, 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中的各种CDI限定符中看到的值()是什么?全部内容,希望文章能够帮你解决我在java中的各种CDI限定符中看到的值()是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。