Annotation是從JDK5.0開始引入的新技術(shù)
Annotation的作用:
—不是程序本身迂烁,可以對程序作出解釋(這點和注解沒什么區(qū)別)
—可以被其他程序讀妊Α(注解信息處理流程,這是注解和注釋的重大區(qū)別)
Annotation的格式:
@"注釋名"上煤,還可以添加一些參數(shù)休玩,如@SupperssWarning(value="uncheck")
Annotation在哪里使用:
可以附加在package,class劫狠,method拴疤,field等上面,可以通過反射機制實現(xiàn)對這些元數(shù)據(jù)的訪問
內(nèi)置注解
@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());
//根據(jù)表名荞膘,字段等信息愧薛,拼出DDL語句,使用JDBC執(zhí)行SQL在數(shù)據(jù)庫中生成對應的表
} catch (Exception e) {
e.printStackTrace();
}
}
}```