Annotation是从JDK5.0开始引入的新技术
Annotation的作用:
—不是程序本身,可以对程序作出解释(这点和注解没什么区别)
—可以被其他程序读取(注解信息处理流程,这是注解和注释的重大区别)
Annotation的格式:
@"注释名",还可以添加一些参数,如@SupperssWarning(value="uncheck")
Annotation在哪里使用:
可以附加在package,class,method,field等上面,可以通过反射机制实现对这些元数据的访问
内置注解
@Override
只能修饰方法,表示打算重写超类中的方法
@Deprecated
可用于修饰方法、属性、类,表示已废弃,即不建议程序员使用,在JDK源码中常见
@SuppressWarnings
抑制编译时的警告信息
自定义注解
元注解
写一个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();
}
}
}```