<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の組み合わせを使用することができましたが、構築されている環境に固有のビルドが作成されます。私が本当にやりたいことは、実行時にPropertyPlaceHolderConfigurerが読み取ったプロパティに基づいて置換を実行し、その結果をEhCacheManagerBeanに渡すことです。
@Valueアノテーションの背後にある機能を何とか複製することを考えているのは、ディスクからファイルを読み込んだ後に "bla bla $ {property} bla bla bla"を置き換えることができるからです。
これについてどうやったらいいですか?
ありがとうございました。 -AP_
@Value( "bla $ {param} bla)をとり、正しく置き換えを行うコードがいくつかあります。このコードを実行時に何らかの形でファイルの内容を文字列として渡すことを考えていましたが、パラメータを置き換えた文字列を返す。 –
何か掘り下げた後、私はこれを見つけました: ((ConfigurableApplicationContext)applicationContext).getBeanFactory()。resolveEmbeddedValue( "$ {someValue}"); 古いファイルを読み取ることができます。この方法を使用すると、すべてのプレースホルダが解決されます。より多くのコードを書かなくても、Beanの設定からこれを行うことができるSpringには何かありますか? –
私はAdiの答えはかなりまともなハックだと思います。 XMLを文字列に読み込み、必要な部分に文字列置換を行い、文字列を設定場所(InputStreamResource/StringBufferInputStream)として設定してからsuperを呼び出します。 – sourcedelica