注意点:必须是运行时注解
1.当使用反射解析类或者接口或者枚举上的注解的时候,使用字节码文件对象来获取注解
@Table(tableName = "t_emp",tableCount = 8)
public class Employee {
//(1)创建实体类
@primaryKey
@Column(culumnName = "EMPNO",columnType =Integer.class)
private Integer empno;
@Column(culumnName = "ENAME",columnType =String.class)
private String ename;
@Column(culumnName = "JOB",columnType =String.class)
private String job;
@Column(culumnName = "MGR",columnType =Integer.class)
private Integer mgr;
@Column(culumnName = "hiredate",columnType =java.sql.Date.class)
private Date hiredate;
private Double sal;
private Double comm;
private Integer deptno;
用反射提取注解信息
public class AnnotationDemo02 {
//提取员工类上的注解
public static void main(String[] args) {
//获取类的字节码文件
Class<Employee> cls = Employee.class;
//获取类上面指定的注解
Table annotation = cls.getAnnotation(Table.class);
//获取注解上的信息
int count = annotation.tableCount();
String name = annotation.tableName();
System.out.println(count);
System.out.println(name);
}
}
利用反射提取字段上的注解
private static void getFieldAnno() throws NoSuchFieldException {
//提取某个字段上的注解,例如ename
//步骤:先获取ename字段对象,再获取ename字段上面绑定的注解对象,再获取注解的信息
Class<Employee> cls = Employee.class;
Field ename = cls.getDeclaredField("ename");
//利用字段获取注解
Column annotation = ename.getAnnotation(Column.class);
//获取注解上的信息
Class<?> type = annotation.columnType();
String name = annotation.culumnName();
System.out.println(type);
System.out.println(name);
}
获取所有字段的所有注解
步骤:
(1)获取类的字节码
(2)利用字节码获取所有的字段
(3)遍历每一个字段
(4)获取每一个字段上的所有注解—得到注解的数组
(5)判断:如果这个注解数组不为空,则遍历这个注解数组
(6)判断字段上对象是否存在该注解类型
(7)如果存在,那就向下转型,并获取注解中的信息
private static void getFliedAnnos() {
//获取所有字段
Class<Employee> cls = Employee.class;
Field[] fields = cls.getDeclaredFields();
//遍历每一个字段
for (Field field : fields) {
//获取字段上的所有注解
Annotation[] annotations = field.getAnnotations();
//判断某个字段上是否存在注解
for (Annotation anno : annotations) {
if(field.isAnnotationPresent(anno.annotationType())){
//存在就获取
Annotation annotation = field.getAnnotation(anno.annotationType());
System.out.println(annotation);
if(annotation instanceof primaryKey){
primaryKey pk=(primaryKey)annotation;
System.out.println(pk+"该注解是标记注解,没有属性");
}else if(annotation instanceof Column) {
Column column=(Column)annotation;
System.out.println(column.columnType());
System.out.println(column.culumnName());
}
}
}
}
}
版权声明:本文为Apple_Andy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。