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