java反射的理解以及从注解中获取到值,并赋值给类中的属性
要了解注解先知道反射,往下看
开始反射
//获取 类
Class dogClass = Class.forName("com.ertiao.dog");
//生成 构造器 获取构造方法的结构 可以是有参构造方法和无参构造方法
//无参构造方法
Constructor<dog> dogConstructor =dogClass.getConstructor();
//有参构造方法
Constructor<dog> dogConstructor =dogClass.getConstructor(String.class,int.class);
//生成 dog实例对象 (无参构造方法生成对象,想有参的话调用有参的构造器生成)
Dog dog = dogConstructor.newInstance();
//获取类中的私有方法 (只是包含当前类的方法)
Method[] methods = dogClass.getDeclaredMethods();
//获取类中的私有属性 (包括私有的属性)
Field[] fields = dogClass.getDeclaredFields();
//开启暴力反射对私有属性进行赋值 可以对私有的属性和方法使用
field.setAccessible(true);
//属性进行赋值
field.set(对象,值)
//获取注解对象
field.getAnnoation(注解.class)
//总结小例子 获取 类 中 属性 的注解
解释:
注解.class 是我们自定义的注解 如果不清楚怎么自定义注解可以搜索 自定义注解
field 当前属性加入了自定义注解 才会对这个属性进行赋值
filed 只是一个别名 实际代表的是 类中的加了自定义注解的属性
前置条件:
1、需要有自定义注解
2、在使用的地方加上自定义注解
步骤:
1、遍历类中所有的属性
2、检查属性上有没有该注解
for(Field field: fields){
//获取属性上的注解
注解 annoation=field.getAnnoation(注解.class)
//判断属性中有没有该注解
if(annoation!=null){
//获取注解中的值
String value=annoation.value();
//对dog对象的filed属性进行赋值 值为value
filed.set(dog,value)
}
}