With this class
@Component
public class Sample {
@Value("${my.name}")
public static String name;
}
If I try Sample.name, it is always ‘null’. So I tried this.
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;
}
}
This code works. Sample.name is set properly. Is this good way or not? If not, is there something more good way? And how to do it?
First of all,
public staticnon-finalfields are evil. Spring does not allow injecting to such fields for a reason.Your workaround is valid, you don’t even need getter/setter,
privatefield is enough. On the other hand try this:(works with
@Autowired/@Resource). But to give you some constructive advice: Create a second class withprivatefield and getter instead ofpublic staticfield.