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

3

我在一个Spring项目中有一个Java类,看起来(已编辑)像:

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

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


如果没有系统属性,会出现异常:Could not resolve placeholder 'PATH' in value "file:${PATH}/ApplicationContext.xml" at org.springframework.context.annotation.ConfigurationClassParser。因此,这与Spring有关,但我在Spring文档中仍然找不到相关信息。 - DECEMCLMC
1个回答

2

configLocations(类型为String)传递给 FileSystemXmlApplicationContext 构造函数之一,将由继承自 AbstractRefreshableConfigApplicationContext 类的 resolvePath() 方法处理。

resolvePath() 文档说明如下:

解析给定路径,必要时使用对应的环境属性值替换占位符。应用于配置位置。
参见: PropertyResolver.resolveRequiredPlaceholders(String) `resolveRequiredPlaceholders()`文档称:
解析给定文本中的`${...}`占位符,并将其替换为通过getProperty(java.lang.String)解析的相应属性值。无默认值的不可解析的占位符将被忽略并保持不变。

PropertyResolver 声明 getProperty() 方法实际上是 StandardEnvironment

StandardEnvironment 文档说明:

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

除了一个 ConfigurableEnvironment 的通常功能,如属性解析和与配置文件相关的操作,该实现还配置了两个默认属性源,按以下顺序进行搜索:


1
只有检查源代码才能理解所有内容,文档严重缺失。 - Oleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接