注解(Annotation)
什么是注解:
内置注解:
自定义注解:
元注解:
其中:@Target
@Retention
SOURCE反射读不到
RUNTIME运行时加载Annotation到JVM
* 使用反射读取注解的信息,模拟处理注解信息的流程
*/
public classDemo03 {
public static voidmain(String[] args) {
try{
Classclazz = Class.forName(“com.bjsxt.test.annotation.SxtStudent”);
@SxtTable(“tb_student”)//
@Target(value={ElementType.TYPE})//类
@Retention(RetentionPolicy.RUNTIME)
public @interfaceSxtTable {
String value();
}
public classSxtStudent {
@SxtField(columnName=“id”,type=“int”,length=10)//
@Target(value={ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interfaceSxtField {
String columnName();//id
String type();//int
intlength();//10
}
private intid;
@SxtField(columnName=“sname”,type=“varchar”,length=10)
privateString studentName;
@SxtField(columnName=“age”,type=“int”,length=3)
private intage;
public intgetId() {
returnid;
}
public voidsetId(intid) {
this.id = id;
}
publicString getStudentName() {
returnstudentName;
}
public voidsetStudentName(String studentName) {
this.studentName = studentName;
}
public intgetAge() {
returnage;
}
public voidsetAge(intage) {
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();
}
}
}