WebBeansのステレオタイプ
ってこういうことかな?
@Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.TYPE }) public @interface Test1 { } @Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.TYPE }) public @interface Test2 { }
っていうアノテーションがあるとして、
それを親に持つ以下のようなアノテーションを準備する。
@Compositeで親にアノテーションの親も読むように指定しとくと。
@Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.TYPE }) @Composite @Test1 @Test2 public @interface Test1And2 { }
アノテーションがつけられているクラスは以下みたいなかんじ。
@Test1And2 public class Hoge { }
これで意味的には@Test1と@Test2がつけられているのと
等価になるって感じなんかなあ?
ちょっと気にしなくちゃいけない点は
・同様のアノテーションが複数指定できない点(循環を何かしらの方法で防ぐ必要がある)
・上のようなマーカー的なアノテーションの使い方だとよいけど、
値を渡すようなアノテーションを上位に持つと少し使いにくい点
があるかなあ。ちょうど個人的に2週間前くらいにいろいろ試していたので
そこそこタイムリーでした。WebBeansはどうするつもりなんだろうか。
WebBeansのステレオタイプ、ちょっと調べてみようかな。
でも仕様書ってもうあるんでしたっけ???
(追記)
あった。EADだけど。
みてみた。EADにはなんか記述が見つけられなかったので、
こっちみてみた。
アノテーションを親に指定していくだけでそれらも意味的に
含まれるような感じみたい。
public @Secure @Transactional @RequestScoped @ComponentType @Retention(RUNTIME) @Target({TYPE, METHOD}) @interface Action {}
なるほどー。でもまだ議論中だ、みたいなことが書かれていますね。