注解(Annotation)
什么是注解:
内置注解:
自定义注解:
元注解:
其中:@Target
@Retention
SOURCE反射读不到
RUNTIME运行时加载Annotation到JVM
* 使用反射读取注解的信息,模拟处理注解信息的流程
*/
public class Demo03 {
public static void main(String[] args) {
try {
Class clazz = Class.forName(“com.bjsxt.test.annotation.SxtStudent”);
@SxtTable(“tb_student”)//
@Target(value={ElementType.TYPE})//类
@Retention(RetentionPolicy.RUNTIME)
public @interface SxtTable {
String value();
}
public class SxtStudent {
@SxtField(columnName=“id”,type=“int”,length=10)//
@Target(value={ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface SxtField {
String columnName();//id
String type();//int
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 getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//获得类的所有有效注解
Annotation[] annotations=clazz.getAnnotations();
for (Annotation a : annotations) {
System.out.println(a);//@com.bjsxt.test.annotation.SxtTable(value=“tb_student”)
}
//获得类的指定的注解
SxtTable st = (SxtTable) clazz.getAnnotation(SxtTable.class);
System.out.println(st.value());//tb_student
//获得类的属性的注解
Field f = clazz.getDeclaredField(“studentName”);
SxtField sxtField = f.getAnnotation(SxtField.class);
System.out.println(sxtField.columnName()+"–"+sxtField.type()+"–"+sxtField.length());//sname–varchar–10
//根据获得的表名、字段的信息,拼出DDL语句,然后,使用JDBC执行这个SQL,在数据库中生成相关的表
} catch (Exception e) {
e.printStackTrace();
}
}
}
th());//sname–varchar–10
//根据获得的表名、字段的信息,拼出DDL语句,然后,使用JDBC执行这个SQL,在数据库中生成相关的表
} catch (Exception e) {
e.printStackTrace();
}
}
}