Spring 3.0 RC1 のキャッシュ抽象化メカニズムを使用しています。バイトコード (AspectJ ベース) をセットアップして、クラス自体から呼び出されるメソッドにキャッシュ メカニズムを適用できるようにしました。最初にプロキシベースのアプローチを使用していたことは言うまでもありません: すべてが正常に機能していました (メソッドが別のオブジェクトから呼び出されるため)。
AspectJ に切り替えるとすぐに (を介して LTW を有効にし、適切な jar をその場所に追加しました - すべて正常に動作し、例外はスローされません)、キャッシュは行われません。
なにか提案を?ありがとうございました。
====後で編集========
org.springframework の DEBUG にログを設定しました。
プロキシ モードを使用している場合は、「Adding cacheable method 'getLargeAssetContent'....」というメッセージがはっきりと表示されます。ここで、getLargeAssetContent は私の「キャッシュ可能な」メソッドです... (以下を参照してください)
アスペクトモードを使用している場合、このメッセージは表示されません....すべてのリクエストはDAOレイヤーに送られます...キャッシュが機能する状況では、リクエストはサービスレイヤーで停止します。
私が間違っていることは何ですか?aop.xml は必要ですか? AOP を使用していなかったので、aop.xml はまだありません。
ご協力ありがとうございました。
*> *2011-12-12 16:38:55,998 DEBUG [org.springframework.cache.annotation.AnnotationCacheOperationSource]
(http-127.0.0.1-8080-6) 次の属性を持つキャッシュ可能メソッド「getLargeAssetContent」を追加: [CacheOperation[public com.mycompany.myprj.model.AssetContent com.mycompany.myprj.dao.jcr.AssetDAOImpl.getLargeAssetContent(java.lang) .String) com.mycompany.myprj.dao.MyPrjPersistenceException をスローします] caches=[assets] | 条件='' | key='#nodeId'] 2011-12-12 16:38:56,013 INFO [com.mycompany.myprj.dao.jcr.AssetDAOImpl] (http-127.0.0.1-8080-6) アセットのコンテンツ (getLargeAssetContent) の取得id=575d8dc0-01be-41e4-85ce-a654fab97fe8 2011-12-12 16:38:56,092 INFO [com.mycompany.myprj.dao.jcr.AssetDAOImpl] (http-127.0.0.1-8080-6) のノードからid=575d8dc0-01be-41e4-85ce-a654fab97fe8** のノードからのアセットのコンテンツ
*
//コンテンツは現在キャッシュされています 2011-12-12 16:38:57,654 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] (http-127.0.0.1-8080-6) シングルトン Bean のキャッシュされたインスタンスを返す ' assetController' 2011-12-12 16:38:57,654 DEBUG [org.springframework.web.servlet.DispatcherServlet] (http-127.0.0.1-8080-6) Last-Modified value for [/myprj/asset/get/575d8dc0- 01be-41e4-85ce-a654fab97fe8] は: -1 2011-12-12 16:38:57,654 INFO [com.mycompany.myprj.services.AssetService] (http-127.0.0.1-8080-6) id のアセットを取得しています: 57
*