Подтвердить что ты не робот

Spring: Как ввести значение в статическое поле?

С этим классом

@Component
public class Sample {

        @Value("${my.name}")
    public static String name;


}

Если я попробую Sample.name, он всегда будет "null". Поэтому я попробовал это.

public class Sample {

    public static String name;

    @PostConstruct
    public void init(){
        name = privateName;
    }

    @Value("${my.name}")
    private String privateName;

    public String getPrivateName() {
        return privateName;
    }

    public void setPrivateName(String privateName) {
        this.privateName = privateName;
    }  

}

Этот код работает. Sample.name устанавливается правильно. Это хороший способ или нет? Если нет, есть ли что-то более хорошее? И как это сделать?

4b9b3361

Ответ 1

В общем, public static не final поля зло. Spring не позволяет вводить такие поля по какой-либо причине.

Ваше обходное решение действительно, вам даже не требуется getter/setter, поле private достаточно. С другой стороны, попробуйте следующее:

@Value("${my.name}")
public void setPrivateName(String privateName) {
    Sample.name = privateName;
}  

(работает с @Autowired/@Resource). Но дайте вам несколько конструктивных советов: создайте второй класс с полем private и getter вместо поля public static.