什么是注解
内置注解
自定义注解
比如我们以如下例子做注解
先写一个映射数据库表的学生类:
package annotation_Study;
public class Student {
@yzxField(columnName = "id",type = "int",length = 10)
private int id;
@yzxField(columnName = "name",type = "varchar",length = 10)
private String name;
@yzxField(columnName = "age",type = "int",length = 3)
private int 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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Table注解,即学生类的注解:
package annotation_Study;
/**
* 类注解
*
*/
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value= {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
String value();
}
定义表属性的注解:
package annotation_Study;
/**
* 属性注解
*
*/
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value= {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface yzxField {
String columnName();
String type();
int length();
}
最后加上@Table(“tb_student”)
package annotation_Study;
@Table("tb_student")
public class Student {
@yzxField(columnName = "id",type = "int",length = 10)
private int id;
@yzxField(columnName = "name",type = "varchar",length = 10)
private String name;
@yzxField(columnName = "age",type = "int",length = 3)
private int 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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
到这里自定义注解就完成
利用反射读取注解
package annotation_Study;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
/**
* 使用反射读取注解信息,模拟处理注解信息的流程
* @author 2Π
*
*/
public class Demo01 {
public static void main(String[] args) {
try {
Class clazz = Class.forName("annotation_Study.Student");
Annotation[] annotations = clazz.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation);
}
//获得类指定的注解
Table tb = (Table) clazz.getAnnotation(Table.class);
System.out.println(tb.value());
//获得类属性的注解
Field f = clazz.getDeclaredField("name");
yzxField filed = f.getAnnotation(yzxField.class);
System.out.println(filed.columnName()+"---"+filed.type()+"---"+filed.length());
} catch (Exception e) {
}
}
}
运行结果如下