不确定最佳方法。我们创建了一个可以被不同项目使用的jar。依赖于这个jar的其他项目需要提供在其spring属性文件中定义的某些属性。 (我们的罐子不应该关心它们命名那些属性文件。)
使用@Value(" $ {some.prop}")适用于大多数属性,但我们现在要求查找属性的名称是动态的。例如:
int val = getSomeVal();
String propNeeded = foo.getProperty("foo."+val+".dynamic.prop");
不确定&#34; foo&#34;应该是我的访问权限。我查看了注入环境,但是从我所有的谷歌搜索看起来它不会从xml属性占位符定义加载(即使定义为PropertySourcesPlaceholderConfigurer的bean def。)你似乎必须使用@PropertySource,但我的主配置是一个XML文件,所以不知道如何让环境工作。 (因为我不知道用户定义的文件的名称,所以我无法查找旧的skool&#39;并将属性文件作为类路径资源查找。)< / p>
我不介意制作这个特定的Service类ApplicationContextAware,但如果我这样做,我怎样才能访问底层的PropertySourcesPlaceholderConfigurer?我会怎么样?&#39;为了动态访问属性需要吗?
另一个选择是我强制jar的用户通过我可以查找的名称来声明bean
<util:properties id="appProps" location="classpath:application.properties" />
然后我将appProps作为属性注入并从那里查找。我不喜欢这种方法,因为它强迫库的用户通过公共ID命名文件。我认为最好的解决方案是以某种方式处理我的服务类中的底层PropertySourcesPlaceholderConfigurer ...我不知道该怎么做?
为什么Spring不会简单地通过XML配置定义PropertySource,然后我可以注入Environment?
感谢您提出如何完成我想要的任何建议。
答案 0 :(得分:0)
您可以声明ReloadableResourceBundleMessageSource与PropertySourcesPlaceholderConfigurer在同一来源中读取。这样你就可以@Autowire MessageSource(或者让你的bean实现MessageSourceAware)并使用它来检索你的属性。
使用ReloadableResourceBundleMessageSource的主要原因是检索I18N消息,这样就会有一些hacky ......