JavaBean

来源:互联网 发布:中银淘宝联名卡 编辑:程序博客网 时间:2024/06/16 18:40

一、概述

JavaBean一种特殊的Java对象。特点如下:

  • 所有的成员私有
  • 对外提供公共的setter 和 getter方法(boolean可以get也可以是is)
  • 提供空参的构造
  • JavaBean属性名要求:前两个字母要么都大写,要么都小写

符合以上规范的类成员,称为javabean的属性。可以用特定的方法,对javabean的属性进行统一的自动赋值操作。

二、内省

1.概念

内省的目标是得到JavaBean属性的读、写方法的反射对象,通过反射对JavaBean属性进行操作的一组API。(哪个2货起的内省这个名字,我保证不打死你),特点如下:

  • 对反射的一层封装。可以获取一个对象的读和写的方法和属性。
  • BeanInfo:就是对一个JavaBean类的描述(属性,方法,事件)
  • Introspector:获取BeanInfo对象

内省的条件是:

  • map中的key必须与javabean的类中的成员变量名字相同

2.内省的方式

2.1 sun公司原始的方法

每个PropertyDescriptor对象对应一个JavaBean属性:

  • String getName():获取JavaBean属性名称;
  • Method getReadMethod:获取属性的读方法;
  • Method getWriteMethod:获取属性的写方法。
//1.建立一个map集合,模板表单提交方式HashMap<String,String> hm = new HashMap<String,String>();hm.put("username", "zhangsan");hm.put("password","22");//2.通过sun公司的内省方式,获取参数BeanInfo beaninfo = Introspector.getBeanInfo(User.class);PropertyDescriptor[] pds = beaninfo.getPropertyDescriptors();//3.创建对象,用于装数据User user = new User();for (PropertyDescriptor pd : pds) {    //遍历集合,如果集合中有与类成员名称相同的,刚取出,用反射赋值    String name=pd.getName();    String value=hm.get(name);    if(value!=null){//如果map和类成员中的对象相符,则开始写入        Method writeMethod = pd.getWriteMethod();//底层用反射的方法        writeMethod.invoke(user, value);//反射调用方法    }}

2.2 appach公司的commons-beanutils

它底层使用了内省,对内省进行了大量的简化!要导入如下两个包:

  • commons-beanutils.jar
  • commons-logging.jar
//指定编码request.setCharacterEncoding("utf-8");//1.得到form表单提交的参数,用map接收Map pm = request.getParameterMap();User user = new User();//2.用内省的方式,调用org.apache.commons.beanutils.BeanUtils,把map中的数据写到user中BeanUtils.populate(user, pm);System.out.println(user);
0 0