美文网首页
Annotation注解

Annotation注解

作者: Stringer | 来源:发表于2017-01-09 14:09 被阅读40次

    Annotation是从JDK5.0开始引入的新技术

    Annotation的作用:

    —不是程序本身,可以对程序作出解释(这点和注解没什么区别)
    —可以被其他程序读取(注解信息处理流程,这是注解和注释的重大区别)

    Annotation的格式:

    @"注释名",还可以添加一些参数,如@SupperssWarning(value="uncheck")

    Annotation在哪里使用:

    可以附加在package,class,method,field等上面,可以通过反射机制实现对这些元数据的访问

    内置注解

    @Override
    只能修饰方法,表示打算重写超类中的方法
    @Deprecated
    可用于修饰方法、属性、类,表示已废弃,即不建议程序员使用,在JDK源码中常见
    @SuppressWarnings
    抑制编译时的警告信息

    自定义注解

    元注解

    Paste_Image.png Paste_Image.png

    写一个ORM的demo

    MyField .java

    @Target(value = {ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyField {
        String columnName();
        String type();
        int length();
    }```
    Table .java
    

    @Target(value = {ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Table {
    String value();
    }```
    Student .java

    @Table("tb_student")
    public class Student {
        @MyField(columnName = "id",type = "int",length = 10)
        private int id;
        @MyField(columnName = "name",type = "varchar",length = 10)
        private String name;
        @MyField(columnName = "age",type = "int",length = 3)
        private int age;
    
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }```
    OrmTest .java
    

    public class OrmTest {
    public static void main(String[] args) {
    try {
    Class clazz=Class.forName("com.ztc.annotation.Student");
    //获得所有注解
    Annotation[] annotations = clazz.getAnnotations();
    for(Annotation a:annotations){
    System.out.println(a);
    }
    //获得指定的注解
    Table tb= (Table) clazz.getAnnotation(Table.class);
    System.out.println(tb.value());

            Field f=clazz.getDeclaredField("name");
            MyField mf=f.getAnnotation(MyField.class);
            System.out.println(mf.columnName()+"--"+mf.type()+"--"+mf.length());
    
            //根据表名,字段等信息,拼出DDL语句,使用JDBC执行SQL在数据库中生成对应的表
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    }```

    相关文章

      网友评论

          本文标题:Annotation注解

          本文链接:https://www.haomeiwen.com/subject/procbttx.html