当前位置: 首页 > 面试题库 >

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

戚阳
2023-03-14
问题内容

我有以下配置类:

@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进行配置。


问题答案:

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

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

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



 类似资料:
  • 这种方法适用于xml配置 但我想使用java进行配置。

  • 本文向大家介绍Spring @value和@PropertySource注解使用方法解析,包括了Spring @value和@PropertySource注解使用方法解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring @value和@PropertySource注解使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考

  • 问题内容: 我有以下配置文件: 我使用以下VM选项运行应用程序: 因此,我希望我的应用程序在启动时加载特定的属性文件。但是由于某些原因,目前未处理注释,属性为。另一方面,如果我已经通过xml文件进行了配置,那么一切都会按预期进行。Xml文件示例: 如果我尝试将属性值注入到另一个Spring配置文件中- 它已正确注入。如果将我的bean创建移动到该配置文件-字段值再次为null。 解决方法是,使用以

  • 本文向大家介绍Spring @Bean注解配置及使用方法解析,包括了Spring @Bean注解配置及使用方法解析的使用技巧和注意事项,需要的朋友参考一下 使用说明 这个注解主要用在方法上,声明当前方法体中包含了最终产生 bean 实例的逻辑,方法的返回值是一个 Bean。这个 bean 会被 Spring 加入到容器中进行管理,默认情况下 bean 的命名就是使用了 bean 注解的方法名。@B

  • 问题内容: 大家好,我是hibernate的初学者,我知道这里有很多类似的问题。我试图从他们那里解决,但我做不到。我还试图在dtd中将SYSTEM从PUBLIC更改为,但是它不起作用。我用谷歌搜索它,但是到处都显示dtd语句错误。 这是我的配置文件。 我尝试将版本3.0更改为4.0,因为我正在使用hibernate版本4.3.6,但仍无法正常工作。请帮帮我。 这是我的userDetails类。 软

  • 嘿,伙计们,我是冬眠的初学者,我知道这里有很多类似的问题。我试图从他们那里解决问题,但我做不到。我还试图在dtd中更改公共系统,但它不起作用。我在google上搜索了它,但它显示的每个地方都有dtd语句错误。 这是我的配置文件。 我尝试将版本3.0更改为4.0,因为我使用的是hibernate版本4.3.6,但它仍然不起作用。请帮帮我。 这是我的用户详细信息类... 包装组织。冬眠src; 我已将