package com.yiheng.yiheng_05_getSomething;
import java.lang.annotation.*;
//通过反射获得注解
//框架底层就是利用反射机制读取注解
public class getAnnotation {
public static void main(String[] args) throws NoSuchFieldException {
Class<Student> studentClass = Student.class;
//获得加在 类上的注解
Annotation[] declaredAnnotations = studentClass.getDeclaredAnnotations();
for (Annotation declaredAnnotation : declaredAnnotations) {
System.out.println(declaredAnnotation);
}
//获得类上的 注解的参数值
Table annotation = studentClass.getAnnotation(Table.class);
System.out.println(annotation.value());
//获得属性上的 注解的参数值
//1、获得一个属性
java.lang.reflect.Field id = studentClass.getDeclaredField("id");
//2、获得属性上的注解
Field annotation1 = id.getAnnotation(Field.class);
System.out.println(annotation1.columnName());
System.out.println(annotation1.type());
System.out.println(annotation1.length());
}
}
//学生表
@Table(value = "db_student")
class Student{
@Field(columnName = "id",type = "int",length = 20)
private int id;
@Field(columnName = "name",type = "varchar",length = 20)
private String name;
@Field(columnName = "sex",type = "int",length = 20)
private int sex;
public Student() {
}
public Student(int id, String name, int sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
}
//定义表的注解
@Target(ElementType.TYPE)//作用在类上
@Retention(RetentionPolicy.RUNTIME)
@interface Table{
String value();//表名
}
//定义在字段的注解
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})//作用类、方法、字段上
@Retention(RetentionPolicy.RUNTIME)
@interface Field{
String columnName();//列名
String type();//类型
int length();//长度
}
【注解和反射9】如何通过反射获得注解
于 2022-05-13 16:56:34 首次发布