- 什么是反射?
- 为什么使用反射?
- 如何获取反射类
- Class反射类常用的方法?
- 获取反射Method对象
- Method类中具有的方法
- 获取反射Field对象
- Field类中常有的方法
1.什么是反射
反射是框架设计的灵魂
之前学过mybatis框架,spring框架,springmvc框架mvc框架
反射就是类在运行期间,把类成员抽取为其他类的过程就是反射
2.为什么使用反射
反射是为了解决在运行期间,对某个实例一无所知的情况下,如何调用其方法或属性
例如:spring框架中只需要传入类的路径,spring框架就会帮你创建类的对象
3.获取Class反射类的方式
第一种:通过类名.class属性
Class<Student> studentClass = Student.class;
第二种:通过类路径获取
Class student=Class.forName("com.syh.test.Student")
第三种:通过方法名获取反射类型
Student stu=new Student();
Class student2=student.getClass()
三种方法是相同的
4.Class反射类常用的方法?
1.根据反射类得到实例对象 newInstance()
2.根据得到反射类上的注解对象。getAnnotation()
5.获取Method方法类对象
getDeclaredMethods(): 得到本类中所有的方法
getDeclaredMethod("方法名",参数类型):获取本类中指定的方法对象
getMethods():获取本类以及父辈类中public修饰的方法。
getMethod("方法名",参数类型):获取本类以及父辈类中指定public修饰的方法
6.Method类中具有的方法
Object r=invoke(Object对象,参数值) 返回方法执行的结果
setAccessible()设置允许访问私有成
7.获取Field属性对象的方式
set(Object对象,值):为属性赋值
getName():获取属性名
getAnnotation():获取属性上的注解对
8.案例
在
public static void main(String[] args) throws Exception { //1.加载属性文件--不会xml [Dom4j解析] InputStream resourceAsStream = Test01.class.getClassLoader().getResourceAsStream("qy174.properties"); //2.通过属性类Properties Properties properties=new Properties(); properties.load(resourceAsStream); //3.属性类读取属性文件中指定的key的值 String className = properties.getProperty("className"); //4. 根据类路径得到反射对象 Class<?> aClass = Class.forName(className); //5. 根据反射类创建类对象 Object o = aClass.newInstance(); System.out.println(o); //6.为属性赋值 Field[] declaredFields = aClass.getDeclaredFields(); for(Field field:declaredFields){ field.setAccessible(true); field.set(o,new Random().nextInt(1000)+""); } System.out.println(o); }
properties属性文件中指定类的路径,通过反射完成类对象的创建以及类中属性的赋值