【发布时间】:2014-12-03 11:04:12
【问题描述】:
不确定解决此问题的最佳方法。我们创建了一个可供不同项目使用的 jar。依赖此 jar 的其他项目需要提供在其 spring 属性文件之一中定义的某些属性。 (我们的 jar 不应该关心这些属性文件的名称。)
使用@Value("${some.prop}") 对大多数属性都很有效,但是我们现在要求要查找的属性名称是动态的。例如:
int val = getSomeVal();
String propNeeded = foo.getProperty("foo."+val+".dynamic.prop");
不确定“foo”应该是什么才能获得我的访问权限。我研究了注入环境,但是从我所有的谷歌搜索来看,它似乎不会从 xml 属性占位符定义中加载(即使定义为 PropertySourcesPlaceholderConfigurer 的 bean def。)您似乎必须使用@PropertySource,但我的主要配置是一个 XML 文件,所以不确定如何让 Environment 工作。 (我不能真正去'old skool'并将属性文件作为类路径资源查找,因为我不知道用户定义的文件的名称。)
我不介意制作这个特定的 Service 类 ApplicationContextAware,但如果我这样做了,我怎么能访问底层的 PropertySourcesPlaceholderConfigurer 呢?我会“看起来?”需要动态访问属性?
另一种选择是我强制 jar 的用户使用我可以查找的名称声明一个 bean
<util:properties id="appProps" location="classpath:application.properties" />
然后我将 appProps 作为属性注入并从那里查找。不过我不喜欢这种方法,因为它强制库的用户使用通用 ID 来命名文件。我认为最好的解决方案是在我的服务类中以某种方式获取底层 PropertySourcesPlaceholderConfigurer 的句柄......我只是不知道该怎么做?
为什么 Spring 不简单地允许通过您的 XML 配置以某种方式定义 PropertySource,然后我可以注入 Environment?
感谢任何建议如何完成我想要的。
【问题讨论】:
标签: spring properties