java – 是否可以使用枚举通过注释映射Spring组件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 是否可以使用枚举通过注释映射Spring组件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1644字,纯文字阅读大概需要3分钟。
内容图文
![java – 是否可以使用枚举通过注释映射Spring组件?](/upload/InfoBanner/zyjiaocheng/733/c3e109e46cad4f9d8be07caa39f2fe6e.jpg)
我正在使用Spring 4,我有一个枚举声明…
public static enum MY_ENUMS {
A(1, "enum1"),
B(2, "enum2");
private final int key;
private final String name;
MY_ENUMS(int key, String name) {
this.key = key;
this.name = name;
}
public String getName() {
return this.name;
}
public int getIndex() {
return this.key;
}
}
然后,从我的组件我试图做…
// @Named is the equivalent of @Component for this use case
// Making name public and trying this also does not work:
// @Named(MY_ENUMS.A.name)
@Named(MY_ENUMS.A.getName())
public class ServiceImplA implements IService {
@Override
public Object interfaceMethod() {
// Some code specific to ServiceImplA here....
}
}
这不构建,我知道为什么这不构建.基本上,MY_ENUMS.A.getName()在编译器中看起来不是常量,这意味着它不能在这里使用.但是枚举的意义在于它们允许您以一种有用的方式声明常量.那么,话虽如此,是否有一种方法可以通过引用枚举中的值来指定组件的名称?
我认为这应该是可能的,因为枚举是常量值的特殊情况/实现,但我想不出一种方法来解决Spring(或者可能是Java)期望注释的值是直线常数的方法.
解决方法:
is there a way I can specify my component’s name by referring to the
value in the enum?
不,那里没有.如果注释属性期望枚举,则可以使用枚举.但是调用方法并不能解析为常量表达式.您可能认为您可以将该字段设为公开并直接访问它
@Named(MY_ENUMS.A.name)
但这不会起作用,因为MY_ENUMS.A.name也不是常量表达式.
theat不是常量表达式的实际原因是枚举常量基本上是变量.有一个常量变量,它是一个常量表达式.要使变量成为常量变量,它必须是final并使用常量表达式进行初始化.枚举常量是final,但未使用常量表达式初始化.基本上编译枚举常量
public static final YourEnum constant = new YourEnum();
新的YourEnum()表达式不是常量表达式.因此,常量不是常量变量,不能用于解析String变量,它可能是常量变量.
内容总结
以上是互联网集市为您收集整理的java – 是否可以使用枚举通过注释映射Spring组件?全部内容,希望文章能够帮你解决java – 是否可以使用枚举通过注释映射Spring组件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。