import lombok.Data;
import java.lang.annotation.*;
import java.lang.reflect.Field;
public class GetAnnotationInfoByRefectionDemo {
/**
* 1.创建了两个注解TableMapper,FieldMapper
* 2.创建了类student并加上了TableMapper,FieldMapper注解
* 3.通过反射获取注解数据
*/
public static void main(String[] args) {
Class<Student> studentClass = Student.class;
//获得类的所有注解
Annotation[] annotations = studentClass.getAnnotations();
for (Annotation annotation : annotations) {
//获取注解的简单名
String simpleName = annotation.annotationType().getSimpleName();
if ("TableMapper".equals(simpleName)) {
TableMapper tableMapper = (TableMapper) annotation;
//获取注解数据
String value = tableMapper.value();
System.out.println("======================");
System.out.println("=========表名:" + value + "=======");
System.out.println("========================");
}
}
//获得类的所有属性(包括私有的字段)
Field[] declaredFields = studentClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
//获取属性名
String name = declaredField.getName();
//获得单个属性的所有注解
Annotation[] declaredAnnotations = declaredField.getDeclaredAnnotations();
for (Annotation annotation : declaredAnnotations) {
//获取注解的简单名
String simpleName = annotation.annotationType().getSimpleName();
if ("FieldMapper".equals(simpleName)) {
FieldMapper fieldMapper = (FieldMapper) annotation;
//获取注解数据
String columnName = fieldMapper.columnName();
String columnType = fieldMapper.columnType();
int columnLength = fieldMapper.columnLength();
System.out.println("=================================================");
System.out.println("=============属性名:" + name + "================");
System.out.println("=============字段名:" + columnName + "================");
System.out.println("=============字段类型:" + columnType + "================");
System.out.println("=============字段长度:" + columnLength + "================");
System.out.println("=========================================================");
}
}
}
}
}
@TableMapper("student")
@Data
class Student {
@FieldMapper(columnName = "id", columnType = "varchar2", columnLength = 20)
private String id;
@FieldMapper(columnName = "name", columnType = "varchar2", columnLength = 30)
private String name;
@FieldMapper(columnName = "age", columnType = "int", columnLength = 3)
private int age;
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface TableMapper {
String value();
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface FieldMapper {
String columnName();
String columnType();
int columnLength();
}