首先,我们都知道Javabean被定义为:Java开发中的可重用组件,Javabean写出的类必须是具体且公共的。此处我们给出Javabean以较为易懂的定义:
1、从狭义上来说,javaBean就是一个特殊的Java类,它里面只包含属性和set和get方法,不过JavaBean里面的set和get方法名必须是set或get+字段名。 形如:SetName()。
2、每一个JavaBean中都隐含包含一个名为class的字段,该字段是从object类中继承而来。
3、对JavaBean操作的两种方式,一种用sun公司自己提供的API, 称为内省(Introspector)API技术。另一种是开源组织Apache提供的BeanUtils框架。这一篇着重总结Introspector的使用方法。
以下给出内省API技术的两种例子:
第一种:通过PropertyDescriptor类操作Bean的属性(示例代码如下):
public void test01() throw exception{
Student student =new Student(); //基于java的内省API
PropertyDescriptor pd =new PropertyDescriptor("name", Student.class); //通过反射,可以得出Student中的name属性描述对象pd
Method method =pd.getWriteMethod(); //得到的method就相当于setname方法获取
method.invoke(student,"Berry"); //相当于student.setName("Berry")
method=pd.getReadMethod(); //得到的method实际上就相当student.getName();
String returnvalue =(String) method.invoke(student,null);
System.out.println("returnvalue="+returnvalue);
第二种:
通过Introspector类获得Bean对象的BeanInfo,然后通过BeanInfo获得属性描述器(PropertyDescriptor)的集合,然后依次遍历就可以得到每一个属性的名字。再通过属性描述器就可以用上面的方法来做。这种方法是用在(不知道目标类的属性名称的时候),如果对方已经暴露给我们类的字段名称了,在这样做就是多此一举。具体例子如下:
public void test2() throws Exception{
//BeanInfo表示该Student对象所有的属性情况
BeanInfo bi = Introspector.getBeanInfo(Student.class);
//取得Student对象所有属性集合
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
for(PropertyDescriptor pd : pds){
System.out.println(pd.getName());//pd.getName()是属性值的名称
}
}
以上是对Javabean以简单的描述,而比较官方正式的描述则是:
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。
JavaBean是可复用的平台独立的软件组件,开发者可以在软件构造器工具中其直接进行可视化操作。