自インスタンスのメソッド呼び出し時に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がかかります。(ださいですが。。)