当前位置 博文首页 > 文章内容

    反射获取注解信息

    作者: 栏目:未分类 时间:2020-09-21 17:00:11

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    package com.sinosoft;
    
    import java.lang.annotation.*;
    import java.lang.reflect.Field;
    
    public class Test02 {
    
        public static void main(String[] args) throws ClassNotFoundException,NoSuchFieldException{
            Class c1 = Class.forName("com.sinosoft.Student");
            //通过反射获得注解
            Annotation[] annotations = c1.getAnnotations();
    
            for (Annotation annotation: annotations) {
                System.out.println(annotation);
            }
    
            //获得注解的value值 注解的名字
            TableName tableName =(TableName) c1.getAnnotation(TableName.class);
            String value = tableName.value();
            System.out.println(value);
    
    
            //获取属性注解的value值
            Field name = c1.getDeclaredField("name");
            FieldName fieldName = (FieldName)name.getAnnotation(FieldName.class);
            String fname = fieldName.columnName();
            int length = fieldName.length();
            String type = fieldName.type();
            System.out.println("name:"+fname+"\nlength:"+length+"\ntype:"+type);
    
    
        }
    
    }
    @TableName(value = "db_student")
    class Student {
        @FieldName(columnName = "db_name",type="int",length = 30)
        private String name;
        @FieldName(columnName = "db_age",type="int",length = 10)
        private int age;
        @FieldName(columnName = "db_id",type="int",length = 10)
        private int id;
    
        public Student() {
        }
    
        public Student(String name, int age, int id) {
            this.name = name;
            this.age = age;
            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;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", id=" + id +
                    '}';
        }
    }
    
    //类名的注解
    @Target(ElementType.TYPE)//表示这个注解只能作用在类上
    @Retention(RetentionPolicy.RUNTIME)//表示作用在运行时
    @interface TableName {
      String value();
    }
    
    //属性的注解
    @Target(ElementType.FIELD)//表示这个注解只能作用在属性上
    @Retention(RetentionPolicy.RUNTIME)//表示作用在运行时
    @interface FieldName{
        String columnName();
        String type();
        int length();
    }
    

      

    运行结果:

    @com.sinosoft.TableName(value=db_student)
    db_student
    name:db_name
    length:30
    type:int