значение атрибута аннотации должно быть постоянным выражением

#java #spring #annotations

#java #весна #аннотации

Вопрос:

У меня есть файл свойств, который я читаю по аннотации spring следующим образом

     @Value("${platform}")
    private String platform;
  

после того, как я получу параметр платформы, я хотел бы прочитать второй параметр в зависимости от platform значения параметра.

     @Value("${url."   platform   ."ws}")
    private String url;
  

но это выдает ошибку: «значение атрибута аннотации должно быть постоянным выражением».
поскольку существует множество изменений параметров в зависимости от значения «платформа», я ищу общее решение.

Ответ №1:

Вы не можете platform получить прямой доступ к выражению @Value , но вы можете использовать язык выражений Spring для достижения своей конечной цели.

 @Value("${platform}")
private String platform;

@Value("#{'Url.'.concat(${platform}).concat('.ws')}")
private String url;
  

Ответ №2:

Параметр вычисляется во время компиляции. Поэтому оно должно быть final или static final среди других (ie Enum ).

Я не знаю @Value , позволяет ли это аннотация. Но вы всегда можете реализовать свою собственную аннотацию. Расширение невозможно в аннотациях Java.

Комментарии:

1. итак, есть ли способ использовать значение первого параметра для получения второго параметра?

2. есть ли какой-нибудь пример того, как я могу расширить аннотацию @Value? я новичок в весенних аннотациях.

3. Нет, это невозможно, но вы можете использовать свою собственную аннотацию.