JDKのAnnotation

2531 ワード

勉強を通して、Annotationは本当にいいものだと気づき、自分で簡単な例を書きました.
ステップ1:
@interfaceを定義します.

package com.org.jdk;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

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

@Target:別のクラス:ElementTypeを使用して、プログラム要素定義のアノテーションが使用される場所を指定します.アノテーションタイプを定義した列挙クラスは、ユーザーが誤用しないように異なるプログラム要素に適用することができます.
ElementTypeは、コメントが使用できる場所を示す列挙タイプです(API)
@Retention:このメタアノテーションはjavaコンパイラがアノテーションを処理するアノテーションタイプに関連しており、コンパイラがカスタムアノテーションタイプを処理するいくつかの異なる選択があり、RetentionPolicy列挙クラスを使用する必要があることを示しています.(API)
ステップ2:
よびだし

package com.org.jdk;

@FirstAnn("         ")
public class AnnoTest {

	@MethodAnn(server_url="http://192.168.0.0",server_username="root",server_password="root")
	public String getConnection(){
		return "         ";
	}
}


ステップ3:
jdkの反射を利用して、次のことを確認できます.

package com.org.jdk;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class AnnotationTest {

	public static void main(String[] arg) {
		try {
			Class obj = Class.forName("com.org.jdk.AnnoTest");
			Method[] methods = obj.getMethods();
			boolean flag = obj.isAnnotationPresent(FirstAnn.class);
			if (flag) {
				FirstAnn t = (FirstAnn) obj.getAnnotation(FirstAnn.class);
				System.out.println(t.value());
			}
			
			 List<Method> list = new ArrayList<Method>();
			  for (int i = 0; i < methods.length; i++) {
			    list.add(methods[i]);
			  }

			for (Method m : list) {
				MethodAnn t = m.getAnnotation(MethodAnn.class);
				if (t == null)
					continue;
				System.out.println(t.server_url() + "\t" + t.server_username()
						+ "\t" + t.server_password());
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

	}
}


実行結果:

         
http://192.168.0.0	root	root


正しく動作しています.