通过JAVA反射取Annotation

Annotation属性值大致有以下三种: 基本类型 数组类型 枚举类型 

import java.lang.annotation.Annotation; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.reflect.Method; 
/**
* 通过JAVA反射取Annotation
* 只有执行时才会加载到Jvm中,才可以取得Annotation信息
* @author Administrator
*
*/ 
@Retention(value=RetentionPolicy.RUNTIME) 
@interface Myannotation05{ 
    public String name() default "name"; 
    public String sex() default "男"; 
    public int age() default 20; 

class Simple{ 
    public void printInfo(){ 
        System.out.println("***"); 
    } 

class SimpleBean extends Simple{ 
    @SuppressWarnings("Unchecked") 
    @Deprecated 
    @Override 
    @Myannotation05(name="张三",sex="男",age=25) 
    public void printInfo(){ 
        System.out.println("获取Annotaion信息"); 
    } 

public class AnnotationDemo04 { 
    public static void main(String[] args) { 
        Class<SimpleBean> classz = SimpleBean.class; 
        try{ 
            Method method = classz.getMethod("printInfo", null); 
            if(method.isAnnotationPresent(Myannotation05.class)){ 
                Myannotation05 info = method.getAnnotation(Myannotation05.class); 
                System.out.println("姓名:"+info.name()+"、 性别:"+info.sex()+"、  年龄:"+info.age()); 
            } 
        }catch(Exception e){ 
            System.out.println(e.getMessage()); 
        } 
    } 


另一个例子:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface VIPAnnotation {
int value();
}

enum DateEnum {
    Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}

@interface UserdefinedAnnotation {
    DateEnum week();
}

public class Concert {
@VIPAnnotation(250)
public void attend(){
     System.out.println("观看演出......");
}

/*public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, NoSuchMethodException {
Class<Concert> clazz = Concert.class;
Object object = clazz.newInstance();
Method method = clazz.getMethod("attend", new Class[]{});
//首先都是可以看演出的
method.invoke(object, new Object[]{});
//如果他是vip
if(method.isAnnotationPresent(VIPAnnotation.class)){
//获得实现了的标记
VIPAnnotation vipAnnotation = method.getAnnotation(VIPAnnotation.class);
int sequcence=vipAnnotation.value();
System.out.println("享受贵宾待遇....");
if(250==sequcence){//看是否为第250号
//还可以享受贵宾待遇
System.out.println("和演员合影.......");
}
}
}*/

@UserdefinedAnnotation(week=DateEnum.Sunday)
    public static void main(String[] args) {
       System.out.println("hello");
    }
}

猜你喜欢

转载自zgq456.iteye.com/blog/1937616