аннотация, которая изменяет строковое значение - PullRequest
1 голос
/ 27 августа 2011

Есть ли аннотация весной или Java, которая преобразует данную строку?

Например, Spring имеет аннотацию @Value («некоторая строка»). Что если вместо присвоения «некоторой строки» переменной параметра / экземпляра, я хочу назначить преобразованное значение этой строки. Допустим, строка "foo". Каждый раз, когда я вижу эту аннотацию, я хочу, чтобы возвращаемая строка была "bar: foo", а не foo. Все, что я хочу, - это иметь возможность размещать аннотацию над параметром или переменной экземпляра и автоматически выполнять это преобразование. Возможно, может быть даже аннотация, которая принимает класс, а также строку, так что класс действует как преобразователь для данной строки.

Есть ли аннотация весной или Java, которая делает это, и если нет, то каков будет лучший способ реализации такой вещи?

Спасибо Lauren

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Вы можете использовать Spring Expression Language внутри вашей @Value аннотации.

Вот как вы будете использовать его для статического метода:

@Value("#{T(fully.qualified.package.name.to.class).getFooString()}")
public void setBar(String value){
   this.bar = value;
}

Если у вас есть определение бина, то вы можете просто использовать @Value("#{bean.method()}") или @Value("#{bean.property}")

0 голосов
/ 27 августа 2011

Аннотация @Value в Spring полезна для присвоения свойству значения, отличного от константы, с использованием языка выражений Spring. Например, значение, считанное из файла свойств. Если бы все, что он делал, это присвоение константы, вы могли бы также использовать private String foo = "bar";.

Таким образом, вы можете использовать его для получения нужного значения из какого-либо файла конфигурации или системного свойства.

Если вы хотите применить какой-либо алгоритм преобразования к полю, я не вижу смысла в использовании аннотации. Просто вызовите метод Java:

@Value("foo") // or some EL expression which evaluates to "foo"
public void setBar(String value) {
    this.bar = someStringTransformer.transform(value);
}

Кажется, что это легко читать, тестировать и поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...