问题描述
我在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()
文档说:
解析给定的路径,必要时用相应的环境属性值替换占位符。已应用于配置位置。
resolveRequiredPlaceholders()
文档说:
解析给定文本中的
${...}
个占位符,将其替换为getProperty(java.lang.String)
解析的相应属性值。没有默认值的无法解析的占位符将被忽略,并原封不动地传递。
PropertyResolver
宣称getProperty()
方法实际上是StandardEnvironment
。
StandardEnvironment
文档说:
Environment
实现,适用于“标准”(即非网络)应用程序。除了
ConfigurableEnvironment
的常用功能(例如属性解析和与配置文件相关的操作)之外,此实现还配置了两个默认属性源,将按以下顺序进行搜索: