那么什么是JavaBean呢?JDK中提供了对JavBean进行操作的一些API,这套API就称为内省。
JavaBean是特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
如果要在两个模块之间传递多个信息,可以将这写信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。这些方法叫什么好呢?JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setid,中文译获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则剩余部分的首字母该为小写。
isLast()→last ;getCPU的属性名→CPU
总之,一个类被当做javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java内部的成员变量。
一个符合JavaBean特点的类可以当做普通类一样进行使用,但作为javaBean有额外的好处。
呵呵,不知不觉扯多了,闲话不多说,下面用代码举个例子吧:比起打字,我超喜欢代码!
例:
一个目标类,获取其属性
public class RefelectDemo{
private int x;
//私有属性,并提供构造方法,set和get 方法
public RefelectDemo(){}
putlic RefelectDemo(int x){
this.x=x;}
//话说博客里打代码真难受
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
//toString方法就不写了
}
//测试类,获取RefelectDemo实例的属性
import java.beans.*;
import java.lang.reflect.*;
//不能忘了导包,一个是Beans,一个关联到了反射
public class IntroSpectorTest {
public static void main(String[] args)throws Exception {
//有异常,可能没有x这属性
RefelectDemo rd= new RefelectDemo(3);
//创建一个RefelectDemo的实例rd,其x的值为3
PropertyDescriptor pd = new PropertyDescriptor("x",rd.getClass());
//获取x对应的set方法,将其改为7;
Method methodsetX =pd.getWriteMethod();
methodsetX.invoke(rd, 7);
//获取x对应的get方法
Method methodgetX =pd.getReadMethod();
System.out.println(methodgetX.invoke(rd));
//结果为7
BeanInfo beanInfo =Introspector.getBeanInfo(rd.getClass());
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pdt:pds)){
if(pd1.getName().equals("x")){
Method method=pd1.getReadMethod();
retVal= method.invoke(rd);
}
}
System.out.println(retVal);
}
//可以看出不使用内省的方法是很不方便的。
}