反射操作注解
getAnnotations
getAnnotation
package 反射;//练习反射操作注解
import java.lang.annotation.*;
import java.lang.reflect.Field;
public class Mai2n {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException{
Class c1=Class.forName("反射.Student1");//通过反射获得class对象
//通过反射获得注解
Annotation[] annotations=c1.getAnnotations();//getAnnotations:获取全部注解
for(Annotation annotation:annotations){
System.out.println(annotation);
}
//获得注解vlaue的值
TableCH tableCH=(TableCH)c1.getAnnotation(TableCH.class);//获得指定注解
String value=tableCH.value();
System.out.println(value);
//获得指定类注解
Field f=c1.getDeclaredField("name");//获得name参数的注解,结果是这个就正确: @FieldCH(columnName="db_name",type="varchar",length=3),db_name,varchar,3
FieldCH annotation=f.getAnnotation(FieldCH.class);
//打印注解的全部字段
System.out.println(annotation.columnName());
System.out.println(annotation.type());
System.out.println(annotation.length());
}
}
//模拟数据库表
@TableCH("db_Student1")
class Student1{
@FieldCH(columnName="db_id",type="int",length=10)//假设数据库存在一个db_id的表,那就让当前的id属性获取一个int类型的值,长度,不超过10
private int id;
@FieldCH(columnName="db_age",type="int",length=10)
private int age;
@FieldCH(columnName="db_name",type="varchar",length=3)
private String name;
public Student1(){
}
public Student1(int id,int age ,String name){
this.id=id;
this.age=age;
this.name=name;
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return name;
}
public void setName(){
this.name=name;
}
public String toString(){
return "User{"+ "id="+id+",age="+age+",name="+name+"}";
}
}
//类名的注解
@Target(ElementType.TYPE)//获取级别
@Retention(RetentionPolicy.RUNTIME)
@interface TableCH{
String value();
}
//属性的注解
@Target(ElementType.FIELD)//获取级别
@Retention(RetentionPolicy.RUNTIME)//作用域
@interface FieldCH{
String columnName();
String type();
int length();
}