2011-10-28 15 views
1

私はSpring 3.0とehcacheを使用しています。 Beanのいくつかのメソッドに@Cacheable注釈を追加しました。私はそのBeanを他のBeanにインジェクトしています。これはアプリケーションコンテキストXMLファイルに登録されています。アプリケーションはehcacheアノテーションを追加する前に動作していましたが(私はcom.googlecode.ehcache-spring-annotations v 1.2.0を使用します)、アノテーションを追加した後、Springはアノテーションを含むBeanを適切に挿入することができません。ログファイルに表示されるエラーは次のとおりです。ehcacheを使用するBeanは注入できません

org.springframework.beans.ConversionNotSupportedException:タイプ '$ Proxy67のプロパティ値の変換に失敗しました。java.io.Serializable、org.springframework.aop.SpringProxy、org.springframework .aop.framework.Adav 'を' {プロパティ} 'の必須の型{my bean type}'に変更しました。ここで

は、私が仕事をするにehcacheのための私のアプリケーションコンテキストに追加したものです:

<context:annotation-config /> 
<context:component-scan base-package="{my root package}" /> 

<ehcache:annotation-driven cache-manager="cacheManager" /> 
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
    <property name="configLocation" value="classpath:ehcache.xml" /> 
</bean> 

私が最初に私はehcache.xmlファイルをロードするいくつかの問題を持っていたがあったので設定は、OKだと思いますそのログの対応するエラー。問題を修正した後、上記のエラーが発生しました。春はehcacheのキャッシュロジックを内部的に呼び出すBeanのプロキシを作成しますが、そのプロキシをBeanタイプに変換することはできません。

+1

'@ Cacheable'アノテーションを持つBeanにはインタフェースがありますが、キャッシュされたものがインジェクトされている他のBeanのインタフェースまたはクラスを使用していますか? – Ralph

+0

とにかく:覚えていれば、 '@ Cacheable'は3.0でサポートされていないSpring 3.1の機能です。 'javax.persistance.Cacheable'を使わないようにしてください! – Ralph

+0

@Ralph、私は正しい '@ Cacheable'アノテーションを使用していると確信しています。私はちょうどいくつかの同僚との問題について話しました。あなたの最初のコメントはおそらく正しい答えを指しています。コンクリートクラスを使用してBeanを注入していますが、Springはプロキシをインターフェースにバインドしているようです。 –

答えて

2

を参照してください春(3.1)参考:お使いの設定で章27. Cache Abstraction

、あなたは、インターフェイスベースのプロキシを使用しています。 キャッシュされたメソッドでBeanを使用するBeanは、その具体的なクラスではなく、そのインターフェイスを参照する必要があります。

また、コンフィグレーションproxy-target-class="true"を変更して、クラスベースのプロキシを使用することもできます。

+0

はい、実際には私の問題を解決したインターフェイスを使用しています。私はSpringの新しいバージョンを使用してうれしく思います。残念ながら、プロジェクト開発の途中で技術を変更することはできません。迅速な回答ありがとうございます。 –

関連する問題