JavaBean组件
在软件开发时,一些数据和功能需要在很多地方使用,为了方便 将 它们 进行“移植”,Sun公司 提出了一种 JavaBean技术,使用JavaBean可以对这些数据和功能 进行封装,做到“一次编写,到处运行””
什么是JavaBean
JavaBean是Java开发语言中一个可以重复使用的软件组件,它的本质就是一个Java类,为了规范 JavaBean的开发,Sun公司 发布了 JavaBean的规范,它要求一个标准的额JavaBean组件 需要遵循 一定的编程规范:
(1)它必须具有一个公共,无参的构造方法,这个方法可以是编译器 自动产生的 默认构造方法。
(2)它提供公共的setter和geter方法 让外部程序 设置和获取 JavaBean的属性。
反射
Java反射的源头是Class类,若想 完成反射操作,首先 必须 认识Class类。一般情况下,需要先 有一个类的完整路径引入后,才可以 按照固定 的格式产生 实例化 对象,但是 在Java中允许 通过 一个实例化对象 找到 一个类的完整 信息,这就是 Class类 的功能。
在Class类中本身没有定义非私有的构造方法,因此不能通过 new直接创建Class类的实例。获得Class类的实例有三种方式
- 通过 “对象.getClass()”方式获取该对象的Class实例。
- 通过Class类的静态方法forName(),用类的全路径名获取 一个Class实例。
- 通过类名.class的方式来获取Class实例。
需要注意的是,通过Class类的forName()方法相比其它两种 方法更加灵活,其它两种方法都需要 明确一个 类,如果 一个类 操作 不确定,使用起来可能会受一些限制。
通过 反射创建对象
1、通过无参构造方法实例化对象 :如果想通过Class类本身实例化其它类的对象,那么就可以使用 newInstance()方法,但是 必须要保证被实例化的类中存在一个 无参构造方法。
2、通过有参构造方法实例化对象: 通过有参构造方法实例化对象时,需要分为三个步骤完成,
- 通过Class类的getConstructors()方法取得本类中的全部构造方法。
- 向构造方法中传递一个对象数组进去,里面包含构造方法中所需的各个参数。
- 通过Constructor类实例化对象。
通过反射访问属性
通过反射不仅可以创建对象,还可以 访问属性,在反射机制中,属性的操作是通过 Field 类实现的,它 提供 的set()和get()方法 分别用于 设置和获取 属性。需要注意的是,如果访问的 属性是 私有的,则需要 在使用set()或get()方法前,使用Field类中的setAccessible()方法将 需要操作 的属性 设置成 可以 被 外界 访问的 。
通过反射调用 方法
当获得某个类对应的Class对象后,就可以 通过Class对象 的getMethods()或 getMethod()方法 获取全部方法或者指定的方法,getMethod()方法 和getMethods()这两个方法的返回值,分别是Method对象和Method对象数组。每个Method对象都对应一个方法,程序可以通过 获取Method对象 来调用 对应的方法。在Mehod里包含了一个invoke()方法,该方法的定义具体如下:
public Object invoke(Object obj,Object....args)
三、内省
JDK提供了 一套API专门用于 操作Java对象的属性,它比反射技术 操作更加简便,这就是内省。
内省(Introspector)是Java语言对JavaBean类属性、事件和方法的一种标准处理方式,它的出现 有利于操作对象属性,并且可以有效的减少 代码量。
内省访问 JavaBean有两种方法:
- 直接通过java.beans包下的PropertyDescription类来操作Bean对象。
- 先通过java,bean包下的Introspector类 获得JavaBean对象的BaseInfo信息,再通过BaseInfo来获取属性的描述器(ProertyDescription),然后通过这个属性描述其就可以获取某个属性对应的getter和setter方法,最后 通过反射机制 来调用这些方法。