Annotation注解

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

Annotation的作用:

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

Annotation的格式:

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

Annotation在哪里使用:

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

内置注解

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

自定义注解

元注解

Annotation注解_第1张图片
Paste_Image.png
Annotation注解_第2张图片
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注解)