2013-01-07 1 views
7

Spring manualからの次のサンプルは、私からの騒ぎを混乱させます。スプリングキャッシュとcachemanger

<bean id="cacheManager" 
     class="org.springframework.cache.ehcache.EhCacheCacheManager" 
     p:cache-manager-ref="ehcache"/> 

<!-- Ehcache library setup --> 
<bean id="ehcache" 
     class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
     p:config-location="ehcache.xml"/> 

命名規則はEhCacheManagerFactoryBeanがキャッシュマネージャを生成し、より正確に、それはnet.sf.ehcache.CacheManagerインスタンスだと義務付け。しかし、豆はehcacheではなく、ehcachemanagerと呼ばれています。ただし、実際のcacheManagerはこのBeanを参照しています。

散文では、一方がEhcacheキャッシュマネージャであり、もう一方がSpringキャッシュマネージャ(前者がサポートしている)だと言えるでしょう。

あなたがEhCacheFactoryBeanを使用する場合はさらに悪化します:

<bean 
    id="myCache" 
    class="org.springframework.cache.ehcache.EhCacheFactoryBean"> 
    <property name="cacheManager"> 
    <ref local="ehcache" /> 
    </property> 

ehcacheと呼ばれるBeanを参照cacheManagerというプロパティがあります。

私は何かを誤解したのですか、それとも本当に混乱しましたか?この例ではデザインが悪いか、悪い名前を付けただけですか?

答えて

5

春のフレームワークは、org.springframework.cache.CacheManagerセントラルインタフェースを持つcaching abstractionを最近導入しました。含むこのインタフェースが持ついくつかの組み込みの実装、:

この設計では、アプリケーションのコードに触れることなく、ライブラリをキャッシュ切り替えることができます。ご覧のとおり、これらの組み込み実装の1つはEhCacheによってサポートされています。しかし、EhCacheCacheManagerはSpringキャッシング抽象化とEhCacheライブラリの間の橋渡しに過ぎないことに注意してください。したがって、既存のnet.sf.ehcache.CacheManagerが必要です。このキャッシュマネージャのインスタンスを自分で作成するか、既存のファクトリBeanを利用することができます。つまり、EhCacheManagerFactoryBeanです。

名前が重複しているために混乱していることは理解していますが、上記のクラスからどのクラスがどのライブラリに由来し、なぜ使用されるのかは明らかです。

+1

これは私の理解が正しいことを確認します。 'ehcacheManager'はそのBeanのより適切な名前になると思いませんか? –

+1

@MarcelStör:そうかもしれない。訂正されたドキュメントで[pull-request](https://github.com/SpringSource/spring-framework)を自由に開くことができます。 –

関連する問題