java反射--注解的定义与运用以及权限拦截 (二)

2014-11-24 10:36:23 · 作者: · 浏览: 1
etentionPolicy;
import java.lang.annotation.Target;

/**
* 字段注解定义
* @author Owner
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyFieldAnnotation {

String uri();
String desc();
}

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

/**
* 字段注解定义
* @author Owner
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyFieldAnnotation {

String uri();
String desc();
}
最后定义一个测试类


[java]
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

@MyClassAnnotation(desc="The class name", uri="com.annotation.MySample")
public class MyTest {

@MyFieldAnnotation(desc="The class field", uri="com.annotation.MySample#id")
private int id;

@MyConstructorAnnotation(desc="The class constructor", uri="com.annotation.MySample#MySample")
public MyTest(){}

public int getId() {
return id;
}

@MyMethodAnnotation(desc="The class method", uri="com.annotation.MySample#setId")
public void setId(int id) {
this.id = id;
}


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

Class clazz = MyTest.class;

//得到类注解
MyClassAnnotation myClassAnnotation = clazz.getAnnotation(MyClassAnnotation.class);

System.out.println(myClassAnnotation.desc()+" "+myClassAnnotation.uri());

//得到构造方法注解
Constructor cons = clazz.getConstructor(new Class[]{});

MyConstructorAnnotation myConstructorAnnotation = cons.getAnnotation(MyConstructorAnnotation.class);

System.out.println(myConstructorAnnotation.desc()+" "+myConstructorAnnotation.uri());

//获取方法注解
Method method = clazz.getMethod("setId", new Class[]{int.class});

MyMethodAnnotation myMethodAnnotation = method.getAnnotation(MyMethodAnnotation.class);

System.out.println(myMethodAnnotation.desc()+" "+myMethodAnnotation.uri());
//获取字段注解
Field field = clazz.getDeclaredField("id");

MyFieldAnnotation myFieldAnnotation = field.getAnnotation(MyFieldAnnotation.class);

System.out.println(myFieldAnnotation.desc()+" "+myFieldAnnotation.uri() );
}

}

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

@MyClassAnnotation(desc="The class name", uri="com.annotation.MySample")
public class MyTest {

@MyFieldAnnotation(desc="The class field", uri="com.annotation.MySample#id")
private int id;

@MyConstructorAnnotation(desc="The class constructor", uri="com.annotation.MySample#MySample")
public MyTest(){}

public int getId() {
return id;
}

@MyMethodAnnotation(desc="The class method", uri="com.annotation.MySample#setId")
public void setId(int id) {
this.id = id;
}


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

Class clazz = MyTest.class;

//得到类注解
MyClassAnnotation myClassAnnotation = clazz.getAnnotation(MyClassAnnotation.class);