反射机制

反射机制

ps:
  Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。

  • 什么是Java的反射呢?

  反射机制是在运行状态中,对于任意一个类或者对象,都能够知道这个类的所有属性和方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

  反射机制常被用于不确定是什么类被加载的时候, 动态得操作类的属性和方法。比如:工具类的中需要获取类的属性和方法。

  • 自审: Java的反射机制可以获得类的基本结构

Class类

要正确使用Java反射机制就得使用java.lang.Class这个类。它是Java反射机制的起源。
当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。

功能
—获取一个对象的类信息.

  1. —获取一个类的访问修饰符、成员、方法、构造方法以及父类的信息.

  2. —检获属于一个接口的常量和方法声明.

  3. —创建一个直到程序运行期间才知道名字的类的实例.

  • 优点:利用Java反射机制我们可以很灵活的对已经加载到Java虚拟机当中的类信息进行检测。
  • 缺点:当然这种检测在对运行的性能上会有些减弱,

所以什么时候使用反射,就要靠业务的需求、大小,以及经验的积累来决定。

反射
获取class对象方式:

  1. 对象.getClass()
  2. Class.forName(类的全路径)
  3. 类名.class ,包装类.TYPE

c) 通过反射访问属性

  1. 创建相对应的class类
  2. 创建person对象
  3. 获取指定的名称的属性
  4. 通过反射访问该属性时要取消权限查询
  5. 通过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) 通过反射调用方法

  1. 实例化class对象
  2. 获取person类中名为sayhello的方法
  3. 调用该方法
Person person = new Person();
Method sayHello = class1.getMethod("sayHello", String.class)
sayHello.invoke(person, "hello, old crab");

利用反射进行构造方法:

  1. 获取class对象
  2. 获取构造器
  3. 创建实例
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的属性

posted @ 2017-11-29 08:28  老螃蟹  阅读(123)  评论(0编辑  收藏  举报