0

SpringアプリケーションでSpringAOPを使用したい。のAOPプロキシを作成しているときにnet.sf.ehcache.CacheManager、Springコンテキストの初期化は次の例外を除いて失敗します。

nested exception is org.springframework.aop.framework.AopConfigException: Could not
generate CGLIB subclass of class [class net.sf.ehcache.CacheManager]: Common causes of 
this problem include using a final class or a non-visible class; nested exception is 
net.sf.cglib.core.CodeGenerationException: net.sf.ehcache.CacheException-->Another   
unnamed CacheManager already exists in the same VM. Please provide unique names for 
each CacheManager in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same  
CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
The source of the existing CacheManager is: InputStreamConfigurationSource 
[stream=java.io.ByteArrayInputStream@955b34]

この問題についての私の理解は次のとおりです-SpringはのAOPプロキシを作成しようとしていますnet.sf.ehcache.CacheManagerが、これは初めて成功し、CacheManagerにデフォルトの名前を付けます__DEFAULT__(これは、デバッグステートメントをehcacheコードに追加し、ソースごとにビルドして、私の応用)。'abcCacheManager'や'xyzCacheManager'(タイプEhCacheManagerFactoryBean)のような複数のキャッシュマネージャーがある場合、Springは複数net.sf.ehcache.CacheManagerのsに遭遇し、それらすべてのプロキシオブジェクト(のようなものnet.sf.ehcache.CacheManager$$EnhancerByCGLIB$$b18c5958)を作成しようとしますが、EhCache>=2.5バージョンでは同じVMの下に同じ名前のキャッシュを複数持つことはできません。

私はEhCache2.5.1を使用していますが、この目的のためだけに2.4に戻ることは避けたいと思います。これが本当に問題なのか、どうすればこの問題を克服できるのかわかりません。

注:これが役立つかどうかは確認してください。ただし、デバッグステートメントから、CacheManagerno-argコンストラクターはspring / CGLIBプロキシジェネレーターによってのみ呼び出され、xyzCacheManager引数として構成を渡すことによって呼び出されることにも気づきました。

4

1 に答える 1

0

注:同じ問題に直面している他の人を助けるかもしれないので、私はこれに自分で答えています。

そもそもそのプロキシは必要ないはずだったので、私の質問に対するjehaのコメントは理にかなっていますが、Spring AOPとプロキシを初めて使用するため、自動プロキシメカニズムがどのように機能するかわかりませんでした。アドバイスでポイントカットの表現を変更したので、その後は上記の問題に直面しませんでした。これ以前は、コンテナ内のほとんどすべてのBeanがプロキシされていたため、問題が発生していました。

于 2012-09-12T09:05:07.073 に答える