java基础---使用反射提取注解信息

注意点:必须是运行时注解

1.当使用反射解析或者接口或者枚举上的注解的时候,使用字节码文件对象来获取注解

@Table(tableName = "t_emp",tableCount = 8)
public class Employee {
    //(1)创建实体类
    @primaryKey
    @Column(culumnName = "EMPNO",columnType =Integer.class)
    private Integer empno;
    @Column(culumnName = "ENAME",columnType =String.class)
    private String ename;
    @Column(culumnName = "JOB",columnType =String.class)
    private String job;
    @Column(culumnName = "MGR",columnType =Integer.class)
    private Integer mgr;
    @Column(culumnName = "hiredate",columnType =java.sql.Date.class)
    private Date hiredate;
    private Double sal;
    private Double comm;
    private Integer deptno;

用反射提取注解信息

public class AnnotationDemo02 {
    //提取员工类上的注解
    public static void main(String[] args) {
        //获取类的字节码文件
        Class<Employee> cls = Employee.class;
        //获取类上面指定的注解
        Table annotation = cls.getAnnotation(Table.class);
        //获取注解上的信息
        int count = annotation.tableCount();
        String name = annotation.tableName();
        System.out.println(count);
        System.out.println(name);
    }
}

在这里插入图片描述

利用反射提取字段上的注解

   private static void getFieldAnno() throws NoSuchFieldException {
        //提取某个字段上的注解,例如ename
        //步骤:先获取ename字段对象,再获取ename字段上面绑定的注解对象,再获取注解的信息
        Class<Employee> cls = Employee.class;
        Field ename = cls.getDeclaredField("ename");
        //利用字段获取注解
        Column annotation = ename.getAnnotation(Column.class);
        //获取注解上的信息
        Class<?> type = annotation.columnType();
        String name = annotation.culumnName();
        System.out.println(type);
        System.out.println(name);
    }

在这里插入图片描述

获取所有字段的所有注解

步骤:
(1)获取类的字节码
(2)利用字节码获取所有的字段
(3)遍历每一个字段
(4)获取每一个字段上的所有注解—得到注解的数组
(5)判断:如果这个注解数组不为空,则遍历这个注解数组
(6)判断字段上对象是否存在该注解类型
(7)如果存在,那就向下转型,并获取注解中的信息

  private static void getFliedAnnos() {
        //获取所有字段
        Class<Employee> cls = Employee.class;
        Field[] fields = cls.getDeclaredFields();
        //遍历每一个字段
        for (Field field : fields) {
            //获取字段上的所有注解
            Annotation[] annotations = field.getAnnotations();
            //判断某个字段上是否存在注解
            for (Annotation anno : annotations) {
                if(field.isAnnotationPresent(anno.annotationType())){
                    //存在就获取
                    Annotation annotation = field.getAnnotation(anno.annotationType());
                    System.out.println(annotation);
                    if(annotation instanceof primaryKey){
                        primaryKey pk=(primaryKey)annotation;
                        System.out.println(pk+"该注解是标记注解,没有属性");

                    }else if(annotation instanceof Column) {
                        Column column=(Column)annotation;
                        System.out.println(column.columnType());
                        System.out.println(column.culumnName());

                    }
                }
            }

        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值