反射獲取註解資訊
阿新 • • 發佈:2020-09-21
package com.sinosoft; import java.lang.annotation.*; import java.lang.reflect.Field; public class Test02 { public static void main(String[] args) throws ClassNotFoundException,NoSuchFieldException{ Class c1 = Class.forName("com.sinosoft.Student"); //通過反射獲得註解 Annotation[] annotations = c1.getAnnotations(); for (Annotation annotation: annotations) { System.out.println(annotation); } //獲得註解的value值 註解的名字 TableName tableName =(TableName) c1.getAnnotation(TableName.class); String value = tableName.value(); System.out.println(value); //獲取屬性註解的value值 Field name = c1.getDeclaredField("name"); FieldName fieldName = (FieldName)name.getAnnotation(FieldName.class); String fname = fieldName.columnName(); int length = fieldName.length(); String type = fieldName.type(); System.out.println("name:"+fname+"\nlength:"+length+"\ntype:"+type); } } @TableName(value = "db_student") class Student { @FieldName(columnName = "db_name",type="int",length = 30) private String name; @FieldName(columnName = "db_age",type="int",length = 10) private int age; @FieldName(columnName = "db_id",type="int",length = 10) private int id; public Student() { } public Student(String name, int age, int id) { this.name = name; this.age = age; 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; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", id=" + id + '}'; } } //類名的註解 @Target(ElementType.TYPE)//表示這個註解只能作用在類上 @Retention(RetentionPolicy.RUNTIME)//表示作用在執行時 @interface TableName { String value(); } //屬性的註解 @Target(ElementType.FIELD)//表示這個註解只能作用在屬性上 @Retention(RetentionPolicy.RUNTIME)//表示作用在執行時 @interface FieldName{ String columnName(); String type(); int length(); }
執行結果:
@com.sinosoft.TableName(value=db_student)
db_student
name:db_name
length:30
type:int