Поле обновления с аннотацией @Value во время выполнения

Давайте представим, что у нас есть такой компонент в Spring:

@Component
public class MyComponent {

    @Value("${someProperty}")
    private String text;
}

Если мы определим заполнитель свойства:

<context:property-placeholder location="classpath:myProps.properties"/>  

И myPropos.properties содержит значение для someProperty, значение будет введено в поле text при инициализации контекста. Это довольно просто и легко.

Но предположим, что у меня есть служба, которая позволяет пользователю изменять значение someProperty:

public void changeProp(String name, String newValue);

Есть ли шанс, что я могу повторно ввести новое значение в текстовое поле. Я имею в виду, что это должно быть довольно прямолинейно. В основном это не что иное, как инъекция после инициализации. Я не могу представить, что у Spring нет поддержки этого? Могу ли я запустить какое-то событие или что-то в этом роде?

Я мог бы сделать это самостоятельно в принципе, но я брожу, может быть, что-то там уже есть? Если нет, то кто-нибудь знает, какой класс Spring на самом деле обрабатывает инъекции? Я мог бы, вероятно, повторно использовать код, который выполняет это самостоятельно, если решения не существует.


person Ivan Senic    schedule 10.05.2013    source источник


Ответы (1)


Я ожидаю, что Spring не поддерживает это, потому что обычная инъекция выполняется при создании bean-компонента, но не будет введена в эксплуатацию.

В любом случае: в этой записи блога "Перезагружаемые свойства приложения с Spring 3.1 , Java 7 и Google Guava", вы можете найти идею решения.

Основная идея заключается в использовании постпроцессора для создания списка всех полей с полями свойств. И если свойства изменены, можно использовать этот список для обновления полей.

person Ralph    schedule 10.05.2013
comment
Да, что-то подобное я имел в виду, если мне нужно реализовать это самостоятельно. - person Ivan Senic; 10.05.2013