58 votes

Printemps 3.2 @valeur de l'annotation avec java pur configuration ne fonctionne pas, mais de l'Environnement.getProperty œuvres

J'ai été me casser la tête sur celui-ci. Pas sûr de ce que je suis absent. Je n'arrive pas à obtenir l' @Value annotations de travailler dans un pur java configuré printemps application(non web)

@Configuration
@PropertySource("classpath:app.properties")
public class Config {
    @Value("${my.prop}") 
    String name;

    @Autowired
    Environment env;

    @Bean(name = "myBean", initMethod = "print")
    public MyBean getMyBean(){
         MyBean myBean = new MyBean();
         myBean.setName(name);
         System.out.println(env.getProperty("my.prop"));
         return myBean;
    }
}

La propriété de fichier ne contient qu' my.prop=avalue Le haricot est comme suit:

public class MyBean {
    String name;
    public void print() {
        System.out.println("Name: " + name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

La variable d'environnement imprime la valeur correctement, l' @Value ne le sont pas.
avalue
Name: ${my.prop}

La classe principale juste initialise le contexte.

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

Cependant, si j'utilise

@ImportResource("classpath:property-config.xml")

avec cet extrait

<context:property-placeholder location="app.properties" />

puis il fonctionne très bien. Bien sûr, de l'environnement renvoie null.

107voto

dimchez Points 1096

Ajouter le suivant bean déclaration dans votre Config classe

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

Pour @Value annotations de travail PropertySourcesPlaceholderConfigurer doit être enregistré. C'est fait automatiquement lors de l'utilisation d' <context:property-placeholder> en XML, mais doivent être enregistrés en tant que static @Bean lors de l'utilisation d' @Configuration.

Voir @PropertySource documentation et, ce Printemps, Cadre de Tableau de problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X