誰かが、 xmlを介してGoogle guavaを構築CacheBuilder
して依存Beanに注入するための優れたスニペットを提供できますか?Spring
Spring
一般化するために、ビルダーパターンを使用したオブジェクトの構築を示すいくつかの例が必要です。
次の Guava リリース (リリース 12) でのCacheBuilderSpecの追加により、 CacheBuilder.from(String spec)静的ファクトリ メソッドCacheBuilder
を使用して、xml で Beanを作成できるようになります。
次のようになります。
<bean id="legendaryCacheBuilder"
class="com.google.common.cache.CacheBuilder"
factory-method="from">
<constructor-arg value="maximumSize=42, expireAfterAccess=10m, expireAfterWrite=1h" />
</bean>
Spring の .properties を使用して、構成文字列を .properties ファイルに外部化することもできますPropertyPlaceholderConfigurer
。
それまでは、Sean Patrick Floyd のソリューションを使用する必要があります (タイプ セーフであるという利点もあります)。
属性を使用して Spring XML で任意factory-method
のメソッドを呼び出すことは可能ですが、Builder-Pattern スタイルの連鎖呼び出しはほとんど不可能であることがわかります。
代わりに、このような複雑なシナリオにはJava ベースのコンテナー構成FactoryBean
を使用してください。残念ながら、XML ではそこまで到達できません。
また、異なるキャッシュ用の異なるキャッシュ ビルダーに関心がない場合は、キャッシュ マネージャーでキャッシュ スペックを直接使用できることも付け加えたいと思います。
キャッシュ マネージャーを初期化するときに各キャッシュを名前で指定する必要はありません。キャッシュに対する新しい要求ごとに、提供された CacheBuilder に基づいて、またはこの場合は提供された Cache Spec (対応する CacheBuilder になります) に基づいてキャッシュが構築されます。
あなたはSpring XMLです。最終的には非常にエレガントになります。
<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager">
<property name="cacheSpecification" value="maximumSize=300000,expireAfterWrite=10h" />
</bean>
また、注意: アプリケーション構成 xml に次のようなものを含めて、キャッシングを使用していることを Spring に伝えることを忘れないでください。
<cache:annotation-driven/>
もちろん、定義する必要があるものは次のとおりです。
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/cache classpath:org/springframework/cache/config/spring-cache-4.2.xsd"
このような単純なことをしているのではなく、さまざまなユース ケースに対応する複数の CacheBuilder が必要な場合は、独自の Factory クラスとメソッドを作成することをお勧めします。