package Reflection;
import java.lang.annotation.*;
import java.lang.reflect.Field;
/**
* @author jiangwentao
* @date 2020/5/26
*/
public class Test04 {
public static void main(String[] args) throws NoSuchFieldException {
Student student = new Student();
//反射获取类对象
Class c = student.getClass();
//获取类上面的注解 (即:@Target(ElementType.TYPE))
Annotation[] annotations = c.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation);
}
//获取类注解内容
TableName tableName = (TableName) c.getAnnotation(TableName.class);
System.out.println(tableName.value());
//通过反射获取类中属性
Field name = c.getDeclaredField("name");
//反射获取属性上的注解
TableField tableField = name.getAnnotation(TableField.class);
System.out.println(tableField.type());
}
}
@TableName("db_student")
class Student {
@TableField(columnName = "db_id", type = "bigint", length = 20)
private int id;
@TableField(columnName = "db_age", type = "int", length = 3)
private int age;
@TableField(type = "varchar", length = 20)
private String name;
public Student() {
}
public Student(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
/**
* @author jiangwentao
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface TableName {
String value();
}
/**
* @author jiangwentao
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface TableField {
//设置default 声明注解时可以不填
String columnName() default "";
String type();
int length();
}
框架原理:通过反射获取注解信息(实例)
最新推荐文章于 2022-02-24 17:01:28 发布