自定义几个注解用于测试
@MyAnnotation01
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation01 {
String[] value();
}
@Table
@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Range {
int max();
int min();
}
@Range
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
String value();
}
定义一个实体类Studnet
package com.lee.myAnnotation;
@Table("student_info")
@MyAnnotation01(value = "Student")
public class Student {
public Student() {
}
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
private int id;
private String name;
@Range(max = 100, min = 0)
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
测试类
package com.lee.myAnnotation;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
/**
*
* @author Lee
*/
public class Test {
public static void main(String[] args) {
try {
Class c = Class.forName("com.lee.myAnnotation.Student");
//获取类的注解
Annotation[] annotations01 = c.getAnnotations();
for (Annotation annotation : annotations01) {
System.out.println(annotation);
}
//获取属性的注解
Field f1 = c.getDeclaredField("age");
Annotation[] annotations02 = f1.getAnnotations();
for (Annotation annotation : annotations02) {
System.out.println(annotation);
}
//获取指定的注解
Table table = (Table) c.getAnnotation(Table.class);
System.out.println(table);
//获取注解里的信息
Field f2 = c.getDeclaredField("age");
Range r = f2.getAnnotation(Range.class);
System.out.println("最大值:"+r.max() +"\n最小值:"+r.min());
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果: