@Value Annotation не вводит значения из файла свойств - PullRequest
4 голосов
/ 15 сентября 2011

Я использую аннотацию @Value для извлечения свойств, и это успешно происходит в методе Normal, но не в конструкторе класса. Может кто-нибудь сказать, в чем причина?

Class A {

    @Value("#{columnProperties['Users.Columns']}")
    String columnNames;

    A()
    {
        System.out.println("In Constructor="+columnNames);
    }

    void show()
    {
        System.out.println("In Method="+columnNames);
    }

}

когда я делаю

A obj=new A();

я получаю вывод

In Constructor = null

и obj.show() дает

В методе = A, B, C

(это означает желаемый результат)

Я хочу, чтобы значения устанавливались сразу после вызова конструктора. Я получаю ошибку компиляции, если я помещаю объявление String в статический или инициализирующий блок.

Ответы [ 2 ]

3 голосов
/ 15 сентября 2011

nicholas.hauschild правильно. @Value будет введено после объекта построено. Если вы хотите выполнить некоторую инициализацию после создания компонента, вам следует реализовать IntializingBean .

3 голосов
/ 15 сентября 2011

Как мы можем быть уверены, что член объекта действительно готов, когда объект не закончен, будучи созданным (то есть конструктор объектов все еще не завершен)? Мне кажется, что Spring не будет вводить это значение, пока ПОСЛЕ завершения работы конструктора.

...