web-dev-qa-db-fra.com

Spring: Comment injecter une valeur dans un champ statique?

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?

68
Whiteship

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.

82
Tomasz Nurkiewicz