zoukankan      html  css  js  c++  java
  • 反射机制读取注解

    一下面的demo来介绍利用反射机制来读取注解

    先自定义注解,一个用来注解类,另一个注解属性,如下面的demo

    package 注解;

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    public class TestAnn {
    @Target(value= {ElementType.TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface ann{//用来实现类名转换为表名
    String value();
    }
    @Target(value= {ElementType.FIELD })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface ann1{//实现属性转换为字段
    String columnname();
    String type();
    int length();
    }
    }

     声明一个学生类,有自己的属性,利用声明的注解为类和属性注解

    package 注解;

    import 注解.TestAnn.ann;
    import 注解.TestAnn.ann1;

    @ann("tb student")//使用注解实现类转换为表名
    public class SxtStudent {
    @ann1(columnname="id",type="int",length=10)//使用注解实现属性转换为字段
    private int age;
    @ann1(columnname="age",type="int",length=3)
    private int id;
    @ann1(columnname="sname",type="varchar",length=10)
    private String 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;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public char[] value() {
    // TODO Auto-generated method stub
    return null;
    }

    }

    然后利用反射机制对学生类操作,获取注解内容

    package 注解;

    import java.lang.annotation.Annotation;
    import java.lang.reflect.Field;

    import 注解.TestAnn.ann;
    import 注解.TestAnn.ann1;

    /**
    * 使用反射解读注解的信息,模拟处理注解信息的流程
    * @author 19575
    *
    */
    public class demo2 {
    public static void main(String[] args) {
    Class clazz;
    try {
    clazz=Class.forName("注解.SxtStudent");
    //获取所有类的注解
    Annotation [] annotations=clazz.getAnnotations();
    for(Annotation s:annotations) {
    System.out.println(s);//方法一
    }
    ann student =(ann )clazz.getAnnotation(ann.class);
    System.out.println(student.value() );//方法二
    //获取属性的注解

    Field f1=clazz.getDeclaredField("name");
    ann1 name=f1.getAnnotation(ann1.class);
    System.out.println(name.columnname()+"--"+name.type()+"--"+name.length());
    Field f2=clazz.getDeclaredField("id");
    ann1 name1=f2.getAnnotation(ann1.class);
    System.out.println(name1.columnname()+"--"+name1.type()+"--"+name1.length());

    Field f3=clazz.getDeclaredField("age");
    ann1 name2=f3.getAnnotation(ann1.class);
    System.out.println(name1.columnname()+"--"+name1.type()+"--"+name1.length());
    //根据获得的表名,字段的信息,拼出sql语句,然后用jdbc执行这个sql,在数据库中生成相关的表
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    }

    代码运行结果如下

    总结:利用反射机制获取注解内容,根据获取的注解内容获得的表名,字段的信息,拼出sql语句,然后用jdbc执行这个sql,就可以在数据库中生成相关的表

  • 相关阅读:
    char和QChar(Unicode的编码与内存里的值还不是一回事)
    ddd
    vim实用笔记
    设计思想
    await使用中的阻塞和并发
    单元测试
    C#简单实现贪吃蛇程序(LinQ + Entity)
    JS逗号、冒号与括号
    C#实现对文件目录的实时监控
    在线预览PDF
  • 原文地址:https://www.cnblogs.com/henuliulei/p/9564567.html
Copyright © 2011-2022 走看看