纯Javaconfiguration的Spring 3.2 @value注解不起作用,但是Environment.getProperty起作用
我一直在这一个上打破我的头。 不知道我缺less什么。 我无法获得@Value
注释在纯javaconfiguration的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; } }
环境variables正确打印值, @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
应该注册。 在XML中使用<context:property-placeholder>
时会自动完成,但在使用@Configuration
时应该将其注册为static @Bean
。
请参阅@PropertySource文档和此Spring框架Jira问题 。