利用Java反射機制讀取註解
阿新 • • 發佈:2018-12-17
java程式碼:
package ORM; @SxtTable("tb_student") public class SxtStudent { @SxtField(columnName="id", type="int", length=10) private int id; @SxtField(columnName="sname", type="varchar", length=10) private String studentName; @SxtField(columnName="age", type = "int", length=3) private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStudnet() { return studentName; } public void setStudnet(String studnet) { this.studentName = studnet; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
自定義註解:
package ORM; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.lang.model.element.Element; @Target(value = ElementType.FIELD) //此註解能用於類 介面 列舉 Annotation型別之前 @Retention(RetentionPolicy.RUNTIME) //表示此註解可以被反射機制讀取 public @interface SxtField { String columnName(); String type(); int length(); }
package ORM; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.lang.model.element.Element; @Target(value = ElementType.TYPE) //此註解能用於類 介面 列舉 Annotation型別之前 @Retention(RetentionPolicy.RUNTIME) //表示此註解可以被反射機制讀取 public @interface SxtTable { String[] value(); }
通過class獲取註解資訊:
package ORM;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
/**
* 使用反射讀取註解資訊,模擬處理註解資訊的流程
* @author lenovo
*
*/
public class ORM {
public static void main(String[] args) {
try {
Class clazz = Class.forName("ORM.SxtStudent"); //返回一個反射物件
Annotation[] annotations = clazz.getAnnotations(); //獲得類的全部註解即@SxtTable("tb_student")
for(Annotation a: annotations) {
System.out.println(a);
}
//獲得類指定的註解
SxtTable st = (SxtTable) clazz.getAnnotation(SxtTable.class);
System.out.println(st.value());
//獲得類的屬性註解
Field f = clazz.getDeclaredField("studentName");
SxtField sxtField = f.getAnnotation(SxtField.class);
System.out.println(sxtField.columnName() + "--" + sxtField.type() + "--" + sxtField.length());
//根據獲得的表名, 欄位資訊, 拼出DDL語句, 使用JDBC執行SQL語句, 在資料庫中生成相關的表
} catch (Exception e) {
e.printStackTrace();
}
}
}
結果: