JavaBean是具有一点规范的java类,
规范性:类的访问权限要是public,要有无参构造器、属性访问权限是private,访问属性要通过set、get方法以及一些命名的规范等等。
效益性:javabean可以在程序里被方便的重用,使开发效率提高。其他类则通过自身的机制发现和操作这些JavaBean属性。
------------------------------------------------------------------------------------------------------------------------------------
JDK中专门提供了一些对JavaBean进行操作的API,这套API称为内省。下面就来实例一下:
这是一个JavaBean类(ReflectPoint):
package com.www.Reflect;
public class ReflectPoint {
private int x;
private int y;
public ReflectPoint(int x,int y){ //构造函数无返回值!可以重载但是不可以被子类覆盖
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
这是测试类(IntroSpectorTest),将在这个类中使用内省API。
package com.www.Reflect;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
/*
* 通过JavaBean来获取和设置类中属性
*/
public class IntroSpectorTest {
public static void main(String[] args) throws Exception {
ReflectPoint pt1 = new ReflectPoint(4, 6);
String propertyName = "x";
// 以下是PropertyDescriptor通过反射机制来获取JavaBean中的set、get方法
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
//通过PropertyDescriptor读取类信息,关键一步
//通过get()获取x的值
Method methodGetX = pd.getReadMethod();//调用方法信息
Object retVal = methodGetX.invoke(pt1);//取得返回值
System.out.println(retVal);
//通过Set()来设置x的值
Method methodSetX = pd.getWriteMethod();//调用方法信息
methodSetX.invoke(pt1,8);//取得返回值
System.out.println(pt1.getX());
}
}
当然,开发中经常使用BeanUtil包来方便的获取、设置属性。(要导入commons-beanutils.jar以及commons-logging-1.1.1.jar两个包)
BeanUtils.setProperty(pt1, propertyName, "9"); //pt1位JavaBean对象,propertyName为属性名
System.out.println(BeanUtils.getProperty(pt1,propertyName));
可以看出导入包之后操作JavaBean变得十分简单。