Spring: как ввести значение в статическое поле? - PullRequest
68 голосов
/ 31 августа 2011

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

@Component
public class Sample {

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


}

Если я попытаюсь Sample.name, это всегда «ноль». Я попробовал это.

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 установлено правильно. Это хороший способ или нет? Если нет, есть ли что-то более хорошее? И как это сделать?

1 Ответ

82 голосов
/ 31 августа 2011

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

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

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

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

...