触る以前の問題

T2frameworkの動作を確認するためT2ユーザーガイドhtml版をとりあえずダウンロードし目を通す。
さらに、t2-samplesをダウンロードし動かしてみた。


eclipseプロジェクトになっているので、簡単に動いた。
ありがたいことこの上ない。
ひとまずAddPage.javaをデバックしてみる。


ここで思ったのだが、プログラムを始めてまだたったの2年ほど、
業務で今だきちんと1.5以上のjavaを触ったことがない僕は、
T2の核になっているらしいアノテーションをきちんと学習しようと思った。
Hibernateを使っているがいまだにxmlでのマッピングである。よくない。わかっているのだが。


で、せっかくなんでT2のソース内のアノテーションを見ながら学んでいくこととする。


で、早速動かしたAddPage.javaにありました→@Page("add")
ユーザガイドをみるとこのような記載が、

@Page("hoge") //<---- Pageアノテーション(必須).引数でPageパスを指定する.


/hogeというURLにアクセスするとこのアノテーションのあるクラスが関連づけらるようだが、
それはいいとして、この"@"+"Page"という記載自体の意味を今は考えることが先だ。


で、@Page自体の宣言部分のコードを見てみる

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Page {
	String value() default "";
}

こうなってる。


"@interface" ? わかんねー。知識ねー。
順番に行きましょう。


このvalue()は何かというと、AddPage.javaではクラス宣言の上に@Page("add")と記載されていますが、
省略なく書くとすると@Page(value = "add")ということらしい。


アノテーションの宣言は@interfaceで宣言するらしい。
例えば

@interface kijitoraneko{
	int old();
	String name();
}


という宣言をした場合。
このアノテーションをクラスHelloで利用するときは、

@kijitoraneko(old = 30 , name = "tora")
public class Hello(){
	~略~	
}

こうなる。

@kijitoraneko(old = "kiji", name = "tora")
public class Hello(){
	~略~	
}

これはエラーになる。

String value() default "";

のdefaultという表記は、
アノテーションを使用する際のデフォルト値を設定しておくということらしい。


@Retenntionとは、J2SE 5.0の中に標準で用意されており、
アノテーションに付けるアノテーション(メタアノテーションというらしい)だそうだ。
パッケージjava.lang.annotationに収められている。他にもある。


@Retenntionの宣言を見てみると、

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
}

さらに戻り値のRetentionPolicyって何?って見てみると、

public enum RetentionPolicy {
   
    SOURCE,		←ソース・コードのみに内容が保持され、
    			コンパイラは使用するがクラスファイルには保持せずその情報は捨ててしまう。

    CLASS,		←クラス・ファイルに内容が保持される

    
    RUNTIME		←ReflectionAPI経由でアクセスできる	
}

enumである。


ここでさっきの@Pageの宣言部では、

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Page {
	String value() default "";
}

@Retention(RetentionPolicy.RUNTIME)となっているので、
この情報はクラスファイルに書き込まれ、更に実行時にReflection経由でアクセス可能であることがわかる。


といったところで、なんとなくアノテーションについては分かったつもりになった。
既存のメタアノテーションとかの内容については、本質が分かれば調べればすむ話である。
何事も本質理解の努力が大事だと思う。分からないことが出たら、調べること。そして理解すること。
そしたらいい仕事できるようになるんじゃないの?


分からないのは恥ずかしいことじゃない。それを笑う人は間違い。
分からないのに、明日も分からないのは恥ずかしいこと。それを笑う人は正解。