Java/Tiger/Annotation
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**アノテーションの概要 [#y1a88571]
アノテーションとはTigerから導入された、クラスやメソッドに...
Tigerに標準で入ってるのはたとえば Override とか Deprecate...
@Override
public void hoge(){
}
などと書くことで、スーパクラスのメソッドをオーバライドし...
Eclipseなどはたとえば、下記のようにタイプミスをした場合、
@Override
public void hhoge(){ <-hogeをhhogeとしちゃった
}
スーパクラスにはこのメソッドhhogeがないので、それを検知し...
**アノテーションの作り方 [#n567c610]
さて自分でアノテーションを定義する方法についてですが、ま...
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
Overrideアノテーションの定義自体にも、アノテーションが記...
@Target(ElementType.METHOD)
は「このOverride注釈を書くことができるのは、メソッドに対...
@Retention(RetentionPolicy.SOURCE)
は「このOverride注釈はソースコード上だけで、クラスファイ...
-[[RetentionPolicy (Java 2 Platform SE 5.0)>http://java.s...
**実際に作ってみる [#v06c42b5]
実際に作ってみましょう。たとえば、ビジネスロジック(以下、...
public class ServiceFactory implements IServiceFactory {
public <T> T createService(Class<T> type) {
なんか、生成処理。
}
}
とインタフェースの型を渡すと、その型の実装クラスを返す、...
このファクトリに対して、インタフェース名、実装クラス名な...
@Services( {
@Service(type = IMessageService.class, value = M...
@Service(type = ILogger.class, value = Applicati...
public class ServiceFactory implements IServiceFactory {
public <T> T createService(Class<T> type) {
Annotationをみて、なんか処理。
}
}
-Serviceアノテーションは、インタフェース名(type)と実装ク...
-Servicesアノテーションは、@Serviceアノテーションの配列を...
こんな感じにファクトリにアノテーションで、設定を記述する...
***これらのアノテーションの定義方法 [#k7f15744]
この2つのアノテーションは以下のように定義しています。
-Service
@Inherited
@Target(ElementType.TYPE) // クラスにのみ
@Retention(RetentionPolicy.RUNTIME) // プログラムからア...
@Documented
public @interface Service {
Class<?> type();
Class<?> value();
boolean singleton() default false;
}
-Services
@Inherited
@Target(ElementType.TYPE) // クラスにのみ
@Retention(RetentionPolicy.RUNTIME) // プログラムからア...
@Documented
public @interface Services {
Service[] value();
}
Serviceアノテーションは、
@Service(type = IMessageService.class, value = MessageSe...
このように設定値type,valueを持ちますが、これらはアノテー...
Class<?> type();
Class<?> value();
に対応しています。戻り値が、記述可能な型を定義しています。
また
@Service(type = ILogger.class, value = ApplicationLogger...
のsingletonという注釈は、先の記述のように記述を省略するこ...
boolean singleton() default false;
に対応しています。型はboolean で、設定しないとデフォルト...
次にServicesですが、
@Services({@Service(... ), @Service(... )})
のように配列のような記述をしています。これは
public @interface Services {
Service[] value();
}
に対応しています。さらにvalueという変数は特殊で、一つの場...
@Services(value = {@Service(... ), @Service(... )})
となるわけですが、valueだけなら冗長なので書かなくてもいい...
@Target(ElementType.TYPE) // クラスのみ
などと注釈がされてますが、これもvalueの省略形の記述という...
***アノテーションに記載してあるアノテーションの意味。 [#w...
まとめ中。
**プログラムからアクセスしてみる。 [#i37549ed]
さて先述のようにファクトリに対してアノテーションを記述し...
public <T> T createService(Class<T> type) {
// アノテーションを取得する。
Services servicess = this.getClass().getAnnotation(Ser...
if (servicess == null) {
return null;
}
// ServicesからServiceの配列を取得。さっきのメソッド名...
Service[] services = servicess.value();
for (Service service : services) {
Class<?> typee = service.type();
Class<?> clazz = service.value();
if (service.singleton()) {
// キャッシュするとか
}
}
return null;
}
このようにプログラム内からアノテーションの記述にアクセス...
----
この記事は
#vote(おもしろかった[10],そうでもない[1])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**アノテーションの概要 [#y1a88571]
アノテーションとはTigerから導入された、クラスやメソッドに...
Tigerに標準で入ってるのはたとえば Override とか Deprecate...
@Override
public void hoge(){
}
などと書くことで、スーパクラスのメソッドをオーバライドし...
Eclipseなどはたとえば、下記のようにタイプミスをした場合、
@Override
public void hhoge(){ <-hogeをhhogeとしちゃった
}
スーパクラスにはこのメソッドhhogeがないので、それを検知し...
**アノテーションの作り方 [#n567c610]
さて自分でアノテーションを定義する方法についてですが、ま...
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
Overrideアノテーションの定義自体にも、アノテーションが記...
@Target(ElementType.METHOD)
は「このOverride注釈を書くことができるのは、メソッドに対...
@Retention(RetentionPolicy.SOURCE)
は「このOverride注釈はソースコード上だけで、クラスファイ...
-[[RetentionPolicy (Java 2 Platform SE 5.0)>http://java.s...
**実際に作ってみる [#v06c42b5]
実際に作ってみましょう。たとえば、ビジネスロジック(以下、...
public class ServiceFactory implements IServiceFactory {
public <T> T createService(Class<T> type) {
なんか、生成処理。
}
}
とインタフェースの型を渡すと、その型の実装クラスを返す、...
このファクトリに対して、インタフェース名、実装クラス名な...
@Services( {
@Service(type = IMessageService.class, value = M...
@Service(type = ILogger.class, value = Applicati...
public class ServiceFactory implements IServiceFactory {
public <T> T createService(Class<T> type) {
Annotationをみて、なんか処理。
}
}
-Serviceアノテーションは、インタフェース名(type)と実装ク...
-Servicesアノテーションは、@Serviceアノテーションの配列を...
こんな感じにファクトリにアノテーションで、設定を記述する...
***これらのアノテーションの定義方法 [#k7f15744]
この2つのアノテーションは以下のように定義しています。
-Service
@Inherited
@Target(ElementType.TYPE) // クラスにのみ
@Retention(RetentionPolicy.RUNTIME) // プログラムからア...
@Documented
public @interface Service {
Class<?> type();
Class<?> value();
boolean singleton() default false;
}
-Services
@Inherited
@Target(ElementType.TYPE) // クラスにのみ
@Retention(RetentionPolicy.RUNTIME) // プログラムからア...
@Documented
public @interface Services {
Service[] value();
}
Serviceアノテーションは、
@Service(type = IMessageService.class, value = MessageSe...
このように設定値type,valueを持ちますが、これらはアノテー...
Class<?> type();
Class<?> value();
に対応しています。戻り値が、記述可能な型を定義しています。
また
@Service(type = ILogger.class, value = ApplicationLogger...
のsingletonという注釈は、先の記述のように記述を省略するこ...
boolean singleton() default false;
に対応しています。型はboolean で、設定しないとデフォルト...
次にServicesですが、
@Services({@Service(... ), @Service(... )})
のように配列のような記述をしています。これは
public @interface Services {
Service[] value();
}
に対応しています。さらにvalueという変数は特殊で、一つの場...
@Services(value = {@Service(... ), @Service(... )})
となるわけですが、valueだけなら冗長なので書かなくてもいい...
@Target(ElementType.TYPE) // クラスのみ
などと注釈がされてますが、これもvalueの省略形の記述という...
***アノテーションに記載してあるアノテーションの意味。 [#w...
まとめ中。
**プログラムからアクセスしてみる。 [#i37549ed]
さて先述のようにファクトリに対してアノテーションを記述し...
public <T> T createService(Class<T> type) {
// アノテーションを取得する。
Services servicess = this.getClass().getAnnotation(Ser...
if (servicess == null) {
return null;
}
// ServicesからServiceの配列を取得。さっきのメソッド名...
Service[] services = servicess.value();
for (Service service : services) {
Class<?> typee = service.type();
Class<?> clazz = service.value();
if (service.singleton()) {
// キャッシュするとか
}
}
return null;
}
このようにプログラム内からアノテーションの記述にアクセス...
----
この記事は
#vote(おもしろかった[10],そうでもない[1])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: