お願いします...次のスプリングポイントカット指定子の使用の違いは何ですか?
「ポイントカット指定子内」の使用:
<aop:pointcut expression="within(my.app.dao.impl.*)" id="commonDaoOperation"/>
「実行ポイントカット指定子」の使用:
<aop:pointcut expression="execution(public * my.app.dao.impl.*.*(..))" id="commonDaoOperation"/>
私は自分の Web プロジェクトで 2 番目のものを使用しています (そして、それが最も使用されていると思います)。このアプローチで見つかった問題は、ヒープで多くのメモリを消費していることです...
「Eclipse メモリ アナライザー」を使用してアプリケーション サーバーの「ヒープ ダンプ」を分析したところ、アプリケーションが 450 MB を消費しており、クラスのインスタンスが 450 MB の"org.springframework.aop.aspectj.AspectJExpressionPointcut
30% を消費していることがわかりました...
の各インスタンスはAspectJExpressionPointcut
(約) 6 MB を占めます。これは、各インスタンスが java.lang.reflect.Method のインスタンスと一致するキャッシュを保持し、驚くべきことにキャッシュされた Java メソッドが多数あるためです (私のポイントカット式では言及されていないメソッド)。
Spring のドキュメントを読んだ後、最初の 1 つのアプローチ (ポイントカット指定子内) を使用することにしました。これにより、各インスタンスがAspectJExpressionPointcut
占有するメモリがはるかに少なくなりました。
問題はそれについてです...それらのパフォーマンスの違いは何ですか...
よろしくお願いします...