使用@PropertySource批注时,无法解析@Value如何配置PropertySourcesPlaceholderConfigurer?

问题描述

如果使用@PropertySource,则必须使用以下方法检索属性:

@Autowired
Environment env;
// ...
String subject = env.getProperty("mail.subject");

如果要使用@Value(“ $ {mail.subject}”)进行检索,则必须通过xml注册prop占位符。

如@cwash所说;

@Configuration
@PropertySource("classpath:/test-config.properties")
public class TestConfig {

     @Value("${name}")
     public String name;


     //You need this
     @Bean
     public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
     }

}

解决方法

我有以下配置类:

@Configuration
@PropertySource(name = "props",value = "classpath:/app-config.properties")
@ComponentScan("service")
public class AppConfig {

and I have service with property:

@Component 
public class SomeService {
    @Value("#{props['some.property']}") private String someProperty;

我想使用以下命令测试AppConfig配置类时收到错误消息

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'someService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.lang.String service.SomeService.someProperty; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'props' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' 

该问题记录在SPR-8539中

但无论如何,我无法弄清楚如何配置PropertySourcesPlaceholderConfigurer 使其正常工作。

编辑1
这种方法适用于xml配置

<util:properties id="props" location="classpath:/app-config.properties" />

但我想使用Java进行配置。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...