JAVA注解入门

 

package testannotation;

import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

import java.lang.reflect.Field;

import java.lang.reflect.Method;



/**

 * @Target说明了Annotation所修饰的对象范围

 * @Retention定义了该Annotation被保留的时间长短

 * @Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API

 */



@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.TYPE)

@interface TypeAnnotation {

    String value() default "DefaultTypeAnnotation";

}



@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

@interface MethodAnnotation {

    String name() default "Default Annotation Name";

    String url() default "default.com";

}



@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.FIELD)

@interface FieldAnnotation {

    String value() default "DefaultFieldAnnotation";

}



@TypeAnnotation("Test the use of TypeAnnotation")

class UseAnnotion {



    @FieldAnnotation(value="FieldAnnotation with value")

    private String field;

    

    @FieldAnnotation

    private String fieldWithDefault;

    

    @MethodAnnotation()

    public void testMethodAnnotation() {

        System.out.println("UseAnnotion->testMethodAnnotation");

    }

    

    @MethodAnnotation(name="唯品会",url="vip.com")

    public void testMethodAnnotationWithValue() {

        System.out.println("UseAnnotion->testMethodAnnotationWithValue");

    }

}



public class TestAnnotation {



    public static void main(String[] args) throws ClassNotFoundException {

        Class anno = Class.forName("testannotation.UseAnnotion");

        Method[] method = anno.getMethods();



        boolean flag = anno.isAnnotationPresent(TypeAnnotation.class);

        if (flag) {

            TypeAnnotation first = (TypeAnnotation) anno.getAnnotation(TypeAnnotation.class);

            System.out.println("类型注解值:" + first.value());

        }



        for (Method m : method) {

            MethodAnnotation methodAnno = m

                    .getAnnotation(MethodAnnotation.class);

            if (methodAnno == null)

                continue;



            System.out.println("获取方法注解\nname:\t"

                    + methodAnno.name() + "\nurl:\t" + methodAnno.url());

        }

        Field []field = anno.getDeclaredFields();

        for(Field f : field) {

            FieldAnnotation fieldAnnotation = (FieldAnnotation)f.getAnnotation(FieldAnnotation.class);

            System.out.println("获取域注解:"+fieldAnnotation.value());

        }

    }

}

 

你可能感兴趣的:(java注解)