共分为4个类
FirstAnno.class
import java.lang.annotation.*;
@Documented
@Inherited // 可以继承
@Retention(RetentionPolicy.RUNTIME) // 保留策略
@Target(ElementType.TYPE) // 修饰目标
public @interface FirstAnno {
String value() default "FirstAnno";
}
SecondAnnotation.class
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SecondAnnotation {
String name() default "Hrmzone";
String url() default "hrmzone.cn";
}
Kitto.class
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Kitto {
String value() default "kitto";
}
测试mian类
@FirstAnno("http://hrmzone.cn")
public class AnnoTest {
@Kitto("测试")
private String test = "";
@SecondAnnotation
public String getDefault() {
return "get default annotation";
}
@SecondAnnotation(name="desktophrm", url="desktophrm.com")
public String getDefine() {
return "get define annotation";
}
public static void main (String[] args) throws ClassNotFoundException {
Class<?> c = Class.forName("AnnoTest");
Method[] methods = c.getMethods();
boolean flag = c.isAnnotationPresent(FirstAnno.class);
if ( flag ) {
FirstAnno first = c.getAnnotation(FirstAnno.class);
System.out.println("FirstAnno = " + first.value());
}
for ( Method m : methods ) {
SecondAnnotation second = m.getAnnotation(SecondAnnotation.class);
if ( second == null )
continue;
System.out.println("SecondAnnotation = " + second.name() + "; " + second.url());
}
Field[] fs = c.getDeclaredFields();
for ( Field f : fs ) {
Kitto kitto = f.getAnnotation(Kitto.class);
if ( kitto == null )
continue;
System.out.println("Kitto = " + kitto.value());
}
Class<?> c1 = Class.forName("AnnoTestInherited";)
}
}
class AnnoTestInherited extends AnnoTest {
}