反射机制
反射机制
ps:
Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。
- 什么是Java的反射呢?
反射机制是在运行状态中,对于任意一个类或者对象,都能够知道这个类的所有属性和方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射机制常被用于不确定是什么类被加载的时候, 动态得操作类的属性和方法。比如:工具类的中需要获取类的属性和方法。
- 自审: Java的反射机制可以获得类的基本结构
Class类
要正确使用Java反射机制就得使用java.lang.Class这个类。它是Java反射机制的起源。
当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。
功能
—获取一个对象的类信息.
-
—获取一个类的访问修饰符、成员、方法、构造方法以及父类的信息.
-
—检获属于一个接口的常量和方法声明.
-
—创建一个直到程序运行期间才知道名字的类的实例.
- 优点:利用Java反射机制我们可以很灵活的对已经加载到Java虚拟机当中的类信息进行检测。
- 缺点:当然这种检测在对运行的性能上会有些减弱,
所以什么时候使用反射,就要靠业务的需求、大小,以及经验的积累来决定。
反射
获取class对象方式:
- 对象.getClass()
- Class.forName(类的全路径)
- 类名.class ,包装类.TYPE
c) 通过反射访问属性
- 创建相对应的class类
- 创建person对象
- 获取指定的名称的属性
- 通过反射访问该属性时要取消权限查询
- 通过set进行赋值
Class<?> class1 = Class.forName("com.oldcran.entity.Student");
Student student = new Student();
Field field = class1.getDeclaredField("age");
// class1.getFields(), class1.getDeclaredFields();
field.setAccessible(true);
field.set(student, 18);
d) 通过反射调用方法
- 实例化class对象
- 获取person类中名为sayhello的方法
- 调用该方法
Person person = new Person();
Method sayHello = class1.getMethod("sayHello", String.class)
sayHello.invoke(person, "hello, old crab");
利用反射进行构造方法:
- 获取class对象
- 获取构造器
- 创建实例
Constructor<?> constructor = class1.getConstructor();
Student stu = (Student)constructor.newInstance();
Constructor<?> constructor1 = class1.getConstructor();
Student stu = (Student)constructor1.newInstance("老螃蟹", 18);
内省
a) 概念:是java提供的一套API专门用于操作java对象的属性,比反射更加方便
通过Introspector 获取 BeanInfo
beaninfo获取propertyDescriptor
然后再获取getter and setter
b) 修改javabean属性
创建person对象
使用属性描述器获取person类name属性的描述信息
获取name属性相对应的setter方法
然后再调用方法修改值
c) 读取bean属性
Jsp标签访问javabean
a) Jsp:useBean标签
得知道id 实例的引用
Scope 为page request session application
b) Jsp:setPeoperty
c) Jsp:getProperty
beanUtils工具
a) 概念:通过beanUtil范文javaBean的属性