[Seasar-dev:200] Re: [S2Container] アクセサメソッドをコンテナ側で自動生成できないか
Koichi Kobayashi
koichik
2005年 12月 10日 (土) 03:03:51 JST
小林 (koichik) です.
Date: Fri, 09 Dec 2005 22:24:53 +0900
From: KOMORI Yusuke <y-komori @ nifty.ne.jp>
To: seasar-dev @ lists.sourceforge.jp
Subject: [Seasar-dev:199] Re: [S2Container] アクセサメソッドをコンテナ側で自動生成できないか
> > そんなに問題になるとは思っていませんが、
> > それほど面倒でもないなら、interTypeとaspectは記述した順番に
> > 適用するとし、interTypeの記述が先なら、追加されたメソッドにも
> > アスペクトが適用できるようにできるでしょうか。
>
> 可能ならば、この仕様の方が良いとわたしも思います。
> 追加したメソッドの呼び出しは、TraceInterceptorで見られるとデバッグ時に
> 重宝しそうなので。
うーん,うーん,極めて困難...
現在の S2AOP の実装では,InterType が追加したメソッドに
アスペクトを適用するにはそのメソッドをオーバーライド
しなければなりません.
しかし,オーバーライドというのはサブクラスで行うもので,
InterType が追加したメソッドを同一のクラスでオーバーライド
することはできません.
よって,ターゲットをエンハンス (継承) したクラスに対して
InterType がメソッドを追加し,それをさらにエンハンス (継承) して
アスペクトを適用できるようにする,ということになります.
これを順不同に組み込めるようにするとなると,<aspect> と
<interType> の数だけエンハンス (継承) を積み重ねることに...
これはちょっと避けたいです.
# 最初の小森さんの問題に逆戻り (^^;
AspectJ でもポイントカットに指定できるのはターゲットクラスの
ジョインポイントであって,他のイントロダクションが追加したメソッドは
指定できないと思います.
> CtClassを解放するので何でもできるのは嬉しいですが、
> 一般には難易度あがりそうですね。代案を出すことはできないのですが、まずは
> このインターフェースにして、将来的にはもう少しラップして使いやすくしてい
> けば良いかと思います。
ラップというか,AbstractInterType という抽象クラスに
ユーティリティ的なメソッドを提供とかかなぁ.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>koichik @ improvement.jp</e-mail>
</signature>
seasar-dev メーリングリストの案内