[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 メーリングリストの案内