web-dev-qa-db-fra.com

Injection de propriété Spring dans un attribut final @Value - Java

Une simple question sur l'injection Spring à partir d'un fichier de propriétés pour un attribut final.

J'ai un fichier de propriétés dans lequel je veux stocker un chemin d'accès. Généralement, lorsque j'utilise des fichiers de propriétés, je configure des attributs de classe en utilisant quelque chose comme ceci:

private @Value("#{someProps['prop.field']}") String someAttrib ;

Puis dans mon spring.xml J'aurais quelque chose comme:

<util:properties id="someProps"   
    location="classpath:/META-INF/properties/somePropFile.properties" />

Cela fonctionne bien, est simple et rend le code agréable et soigné. Mais je ne sais pas quel est le modèle le plus soigné à utiliser lorsque vous essayez d'injecter des valeurs de propriétés dans les attributs de classe finaux?

De toute évidence, quelque chose comme:

private static final @Value("#{fileProps['dict.english']}") String DICT_PATH; 

ne fonctionnera pas. Y a-t-il un autre moyen?

À votre santé!

36
NightWolf

La seule façon d'injecter des valeurs dans un champ final est via Injection du constructeur . Tout le reste serait un horrible hack du côté de Spring.

35
Sean Patrick Floyd

Si vous cherchez un exemple en voici un:

public class Test {
    private final String value;

    public Test(@Value("${some.value}") String value){
        this.value=value;
        System.out.println(this.value);
    }
}
13
Austin Poole