Avec cette classe
@Component
public class Sample {
@Value("${my.name}")
public static String name;
}
Si j'essaie Sample.name
, il est toujours 'nul'. Alors j'ai essayé ça.
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;
}
}
Ce code fonctionne. Sample.name
est réglé correctement. Est-ce bien ou pas? Si non, y at-il quelque chose de plus bon chemin Et comment le faire?
Des sapins à tous, public static
les champs non -final
sont mal. Spring n'autorise pas l'injection dans de tels champs.
Votre solution de contournement est valide, vous n'avez même pas besoin de getter/setter, le champ private
suffit. D'autre part, essayez ceci:
@Value("${my.name}")
public void setPrivateName(String privateName) {
Sample.name = privateName;
}
(marche avec @Autowired
/@Resource
). Mais pour vous donner un conseil constructif: Créez une deuxième classe avec private
field et getter au lieu de public static
champ.