首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring3.2 @value注释使用纯java配置不起作用,但Environment.getProperty起作用

Spring3.2 @value注释使用纯java配置不起作用,但Environment.getProperty起作用
EN

Stack Overflow用户
提问于 2013-06-14 05:36:29
回答 1查看 50.5K关注 0票数 60

在这件事上我已经伤透了脑筋。不确定我错过了什么。我无法让@Value注释在纯java配置的spring应用程序(非web)中工作

代码语言:javascript
复制
@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如下所示:

代码语言:javascript
复制
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}

主类只是初始化上下文。

代码语言:javascript
复制
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

但是,如果我使用

代码语言:javascript
复制
@ImportResource("classpath:property-config.xml")

使用下面的代码片段

代码语言:javascript
复制
<context:property-placeholder location="app.properties" />

那么它工作得很好。当然,现在环境返回null

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-14 06:44:19

Config类中添加以下bean声明

代码语言:javascript
复制
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

为了让@Value注解起作用,应该注册PropertySourcesPlaceholderConfigurer。当在XML中使用<context:property-placeholder>时,它是自动完成的,但是当使用@Configuration时,应该注册为static @Bean

请参阅@PropertySource文档和这个Spring框架Jira issue

票数 110
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17097521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档