在我们的Spring配置的一个方面,我们使用的是:我可以使用PropertyPlaceholderConfigurer在运行时执行String上的属性替换吗?
的applicationContext.xml:
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" lazy-init="true">
<property name="configLocation" value="classpath:ehcache.xml"/>
</bean>
然而,ehcache.xml中是不是一个标准的Spring bean配置文件,但包含$ {ehcache.providerURL }这是我们希望基于我们已经在其他地方PropertyPlaceHolderConfigurer配置成以置换:
ehcache.xml中:
<cacheManagerPeerProviderFactory
...
providerURL=${ehcache.providerURL}
...
</cacheManagerPeerProviderFactory>
我可以使用Maven/profile/filter组合,但是会创建一个特定于它正在为其构建的环境的构建。我真正想要做的是在运行时预处理ehcache.xml,根据PropertyPlaceHolderConfigurer读取的属性执行替换,然后将结果传递给EhCacheManagerBean。
此时,我在考虑重复@Value注释背后的功能,因为它可以替换“bla bla bla $ {property} bla bla bla”,除非我需要在从磁盘读取文件后执行此操作。
关于如何去做这件事的任何想法?
谢谢。 -AP_
Spring中有一些代码需要使用@Value(“bla $ {param} bla)并正确地进行替换。我想在运行时以某种方式使用此代码作为字符串传递我的文件内容,并取回参数替换的字符串。 – 2012-04-06 01:16:35
经过一番挖掘,我发现这个: ((ConfigurableApplicationContext)applicationContext).getBeanFactory()。resolveEmbeddedValue(“$ {someValue}”); 我可以读取任何旧文件,然后使用此方法解析所有占位符。 Spring中有什么可以让我在不需要编写更多代码的情况下从bean配置中做到这一点? – 2012-04-06 02:33:14
我认为阿迪的答案是一个相当不错的破解。将XML读取到字符串中,对所需的部分进行字符串替换,将字符串设置为配置位置(InputStreamResource/StringBufferInputStream),然后调用super。 – sourcedelica 2012-04-06 14:45:57