带有纯java配置的Spring 3.2@Value注释不起作用,但Environment.getProperty工作

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (300)

我无法为@Value使用纯java配置的spring应用程序(非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;
    }
}

属性文件只包含my.prop=avalue这个bean,如下所示:

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;
    }
}

环境变量正确输出值,@Value没有。 avalue Name: ${my.prop}

主类只是初始化上下文。

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

但是,如果我使用

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

与此片段

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

那么它工作正常。当然,环境现在返回了null

提问于
用户回答回答于

在你的Config类中添加下面的bean声明

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

为了使@Value注释工作PropertySourcesPlaceholderConfigurer应该注册。它在使用<context:property-placeholder>XML 时自动完成,但应static @Bean在使用时注册为@Configuration

扫码关注云+社区