Spring 3.1 ConfigurableWebApplicationContext属性@Value无法解析

时间:2013-01-18 15:22:04

标签: spring properties

我需要在启动时添加一堆在数据库中备份的属性。 为了测试整个事情,我从这开始(下面的ds.username属性来自catalina.properties。它只是为了验证我没有破坏任何东西):

public class PropertiesInitializer implements ApplicationContextInitializer<ConfigurableWebApplicationContext> {
@Override
public void initialize(ConfigurableWebApplicationContext ctx) {
try {
    props.put("hello", "goodbye");
    MutablePropertySources propertySources = ctx.getEnvironment().getPropertySources();
    propertySources.addFirst(new MapPropertySource("dbProps", props));
}
catch(Exception e) {
        e.printStackTrace();
    }
}

我有一个@Controller,我这样做:

@Autowired
Environment env;
@Value( "${hello}" )
public String hello;
@Value( "${ds.username}" )
public String un;
...

因此,当我打印它们时,'hello'和'un'是空的,但env.getProperties实际上返回了正确的值。

为什么?

由于

Gerardo Blanco

1 个答案:

答案 0 :(得分:1)

默认情况下不启用

${...}属性,您需要将PropertySourcesPlaceholderConfigurer声明为bean才能启用它们。

Environment开箱即用,因为它不需要特殊配置。