« DetachedCriteriaとCriteria | メイン | Android勉強会 »

自インスタンスのメソッド呼び出し時にAOPがかからない

Spring FrameworkでのAOPの話です。Springに限らずそうですが、AdviceがPointCutにマッチしたとしても、自インスタンスからの呼び出し時には適用されません。(Proxy越しにならないからですね。)
他のインスタンスからの呼び出しに変えるのが最もわかりやすい方法ですが、そのように出来ない場合には、自インスタンスのメソッド呼び出し前にProxyを作ってAdviseを適用しなおすような方法になると思います。
例えば以下のような感じです。

ProxyFactory proxyFactory = new ProxyFactory(this);
Map advisors = ((ListableBeanFactory) BeanFactoryの取得).getBeansOfType(Advisor.class);
Iterator iterator = advisors.keySet().iterator();

while (iterator.hasNext()) {
 Advisor advisor = (Advisor) advisors.get(iterator.next());
 proxyFactory.addAdvisor(advisor);
}

こうすると、proxyFactory.getProxyでインスタンスが取れます。こいつ越しに呼べば、ちゃんとAOPがかかります。(ださいですが。。)


トラックバック

このエントリーのトラックバックURL:
http://www.grandnature.net/bin/mt-tb.cgi/76

コメントを投稿

About

2008年06月02日 16:34に投稿されたエントリーのページです。

ひとつ前の投稿は「DetachedCriteriaとCriteria」です。

次の投稿は「Android勉強会」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。