Spring如何在字符串中插入$ {x}?

问题描述

我在Spring项目中有一个java类,看起来(编辑)如下:

@Component
public class X
{
private static final ApplicationContext CTX = new FileSystemXmlApplicationContext("file:${PATH}/ApplicationContext.xml");
...

我正在寻找解释如何在字符串参数中插入$ {PATH}的参考。 PATH是作为系统属性(java -dpath = ...)传递的,因此我假设它从那里获取它,但是我找不到描述该机制的解释。它是与Spring相关的功能,类似于@Value中使用的语法吗?

解决方法

传递给FileSystemXmlApplicationContext构造函数之一的

configLocations(类型String)由从resolvePath()类继承的AbstractRefreshableConfigApplicationContext方法处理。

resolvePath()文档说:

解析给定的路径,必要时用相应的环境属性值替换占位符。已应用于配置位置。

另请参见:
PropertyResolver.resolveRequiredPlaceholders(String)

resolveRequiredPlaceholders()文档说:

解析给定文本中的${...}个占位符,将其替换为getProperty(java.lang.String)解析的相应属性值。没有默认值的无法解析的占位符将被忽略,并原封不动地传递。

PropertyResolver宣称getProperty()方法实际上是StandardEnvironment

StandardEnvironment文档说:

Environment实现,适用于“标准”(即非网络)应用程序。

除了ConfigurableEnvironment的常用功能(例如属性解析和与配置文件相关的操作)之外,此实现还配置了两个默认属性源,将按以下顺序进行搜索: