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


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

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

1 55

1 ответ:

в первую очередь public static неfinal поля зло. Весна не позволяет закачивать в такие поля по какой-то причине.

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

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

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