Я работаю с весной 4, и у меня есть перечисление объявлено как ...Можно ли связать компоненты Spring с помощью аннотаций с помощью перечислений?
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), чтобы значение аннотации было прямо вверх.