[aspectj-users] Combination of Class Annotation and Method Annotation matching
僕の投稿なんですが。
class Base{ void func(){} }
@Annot
class Derived extends Base{
@Annot void func(){}
}
こんなクラスがある場合、execution(@Annot * (!@Annot *).*(..))というポイントカットが、Derived.funcにマッチするのは何故?って話。
結論としては、AspectJのマッチング仕様としては正しい動作らしい。
AspectJのマッチングは、実際にはメソッドそのものではなくそのシグネチャとマッチングを行っていて、1つのメソッドは複数のシグネチャを持ち、かつアノテーション等のデジネータは上書きされるってことらしい。つまり、Derived.funcは、親クラスのfuncのシグネチャを引き継ぐため、"Base.func"と"@Annot void (@Annot Derived).func"の2つのシグネチャを持つ。で、前述のポイントカットは上書きされて"@Annot Base.func()"になるので、Derived.funcがマッチするそうな。
これをマッチさせないための対処としてはexecution(@Annot * *.*(..)) && !within(@Annot *)というポイントカットを使うこと。
なんか釈然としないので、その後も議論の継続を試みたのだけど、止まってしまった。
クラスアノテーションもオーバーライドされれば(void Derived.funcが@Annot void (@Annot Base).func()と扱われれば)、すっきりすると思うんだけどなぁ。
2006/09/01
2006/08/15
[aspectj-users] 秀逸な突っ込み
[aspectj-users] Transparent Caching with AspectJ in 10 minutes
Piotrさんが、AspectJを使ったキャッシングに関する記事「AspectJを使った透過的キャッシュ」を書いたよ~ってMLでお知らせ。投稿のタイトルに"in 10 minutes"とあるんだけど、それに対してついたコメントが、
「ちょっとまった。ロギングにAspectJ使ってないじゃないか。
完全なものにするにはもう10分くらいかかるんじゃないかな。」
笑った。
Piotrさんが、AspectJを使ったキャッシングに関する記事「AspectJを使った透過的キャッシュ」を書いたよ~ってMLでお知らせ。投稿のタイトルに"in 10 minutes"とあるんだけど、それに対してついたコメントが、
「ちょっとまった。ロギングにAspectJ使ってないじゃないか。
完全なものにするにはもう10分くらいかかるんじゃないかな。」
笑った。
2006/08/08
[aspectj-users] パラメータアノテーションのマッチング
[aspectj-users] Matching on parameter annotations
パラメータアノテーションは指定できないの?って話。
Java5からアノテーションが導入されて、様々な要素に注釈をつけることが可能になった。
で、あまりフォーカスされないんだけど、
public class Test{
void func(@Annot int arg){
}
}
ってな感じに、パラメータに対してもアノテーションが使える。
で、話の内容は、AspectJ5ではクラスやメソッドのアノテーションは扱えるけど、パラメータのアノテーションは扱えないの?ってこと。結論としては、現在のバージョン(1.5.2)では扱えないけど、将来扱えるようになるらしい。
パラメータアノテーションは指定できないの?って話。
Java5からアノテーションが導入されて、様々な要素に注釈をつけることが可能になった。
で、あまりフォーカスされないんだけど、
public class Test{
void func(@Annot int arg){
}
}
ってな感じに、パラメータに対してもアノテーションが使える。
で、話の内容は、AspectJ5ではクラスやメソッドのアノテーションは扱えるけど、パラメータのアノテーションは扱えないの?ってこと。結論としては、現在のバージョン(1.5.2)では扱えないけど、将来扱えるようになるらしい。
2006/08/07
[aspectj-dev] AspectJをAspectJ自身の実装に使う
http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg02084.html
そろそろAspectJをAspectJ自身の実装に使っていってもいいんじゃないかって提案。
実際既に1つだけアスペクトが利用されてるんだけど、もっとがっつり使おうよってことらしい。
おもしろい。
そろそろAspectJをAspectJ自身の実装に使っていってもいいんじゃないかって提案。
実際既に1つだけアスペクトが利用されてるんだけど、もっとがっつり使おうよってことらしい。
おもしろい。
2006/04/22
2005/11/24
アスペクト指向入門 [書籍]
東工大の千葉先生が書かれたAOPの入門書が発売されました。
http://www.amazon.co.jp/exec/obidos/ASIN/4774125814
AOPの概念が丁寧に解説されていて、おすすめです。
オブジェクト指向に関する基礎知識があれば、かなりわかりやすいです。
学術的なリンクもたくさんあるので、学生にもおすすめです。
http://www.amazon.co.jp/exec/obidos/ASIN/4774125814
AOPの概念が丁寧に解説されていて、おすすめです。
オブジェクト指向に関する基礎知識があれば、かなりわかりやすいです。
学術的なリンクもたくさんあるので、学生にもおすすめです。
2005/11/19
WhiteDog Studioにおけるアノテーションについて

WhiteDog System 0.9.5から、WhiteDog Studioにおいてアノテーションがサポートされています。whitedog-annotations.jarでサポートされるアノテーションが付加されていると、その内容がGUIに反映されます(画像参照)。また、"自動ビルド"がチェックされた場合、ドラッグ&ドロップされたjarファイルを、自動的にビルドします。
サポートされているアノテーションは、次の通りです。
jp.whitedog.annotation.WhiteDogMethod
引数: なし
このアノテーションが付加されたメソッドを、共有するメソッドとして扱います。GUI上で自動的にチェックされます。jp.whitedog.annotation.WhiteDogDescription
引数: value: String - GUIに表示する説明
GUI上で、このアノテーションが付加されたクラス又はメソッドに、引数として指定された説明を表示します。jp.whitedog.annotation.WhiteDogConnection
引数: host: String - 接続するホスト
このアノテーションで指定されたホスト情報を、アスペクトコード生成時の接続ホスト情報として読み込みます。jp.whitedog.annotation.WhiteDogConnectionStartPoint
引数: なし
このアノテーションが指定されたメソッドを、接続開始点として認識します。jp.whitedog.annotation.WhiteDogMainClass
引数: なし
このアノテーションが指定されたメソッドを、jar生成時のメインクラスとして認識します。
2005/09/11
学会発表
来週仙台で開催されるソフトウェア科学会第22回大会で、WhtieDog System関連の発表を行います。13日です。WhiteDog Studioに搭載される機能についてです。
牛タンでも喰ってこようかと思ったけど、
まだ高いんだろうなぁ。
牛タンでも喰ってこようかと思ったけど、
まだ高いんだろうなぁ。
2005/08/01
アノテーション
ちょっと前にアノテーションを調べていて、おもしろいものを発見した。
java.lang.reflect.Methodに、Annotation[][] getParameterAnnotations()なんてメソッドが追加されてる。java.lang.annotation.ElementTypeにも、PARAMETERなるフィールドが。
これ使って、Java上のスクリプト言語(Groovyとか)で名前付き引数をサポートしたりするのかな?
java.lang.reflect.Methodに、Annotation[][] getParameterAnnotations()なんてメソッドが追加されてる。java.lang.annotation.ElementTypeにも、PARAMETERなるフィールドが。
これ使って、Java上のスクリプト言語(Groovyとか)で名前付き引数をサポートしたりするのかな?
登録:
投稿 (Atom)