黑马程序员_JavaBean

//以下内容来自张孝祥老师的课堂笔记

1.JavaBean:
a) 一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种 
b) JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量,即有set属性方法和get属性方法,就可以称之为JavaBean。
c) 组成:
i. 属性(properties)
ii. 方法(method)
iii. 事件(event)
 内省:一个符合JavaBean特点的类,把它当做JavaBean用, JDK中提供了对JavaBean操作的一些API,这套API称之为内省。
内省过程:
1)public   <PropertyType>   get<PropertyName>( )
2)public   void   set<PropertyName>(<PropertyType>   p)
如果只发现一个get方法,则确定PropertyName为只读或只写。其中boolean类型的get方法也可以用public   boolean   is<PropertyName>( )来代替。
2.建立一个Javabean类:
public class Dot {
private int x;
private int y;
private int z;
public Dot(int x, int y,int z) {
    super();
    this.x = x;
    this.y = y;
    this.z=z;
}
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;
}
public int getZ() {
    return z;
}
public void setZ(int z) {
    this.z = z;
}
@Override
public String toString() {
    // TODO Auto-generated method stub
    return x "---" y "-----" z;
}
}
3.对javabean属性赋值
private static void setproperty(Object obj,String method,Object str){
  try {
      PropertyDescriptor pdp=new PropertyDescriptor(method,obj.getClass());
      Method meth=pdp.getWriteMethod();//获得应该用于写入属性值的方法。
      meth.invoke(obj,str);//用该方法给指定对象赋予指定参数
  } catch (IntrospectionException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  } catch (IllegalArgumentException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  } catch (IllegalAccessException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  } catch (InvocationTargetException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  }
}
4.获取JavaBean属性的值1:
private static Object getproperty(Object obj,String sx) throws         IntrospectionException, IllegalAccessException,             IllegalArgumentException, InvocationTargetException {
    Object oj=null;
        PropertyDescriptor pdp=new PropertyDescriptor(sx,obj.getClass());
        //PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。
        Method method=pdp.getReadMethod();//获取该方法
      oj=method.invoke(obj);//指定某个对象的方法
    return oj;
}
5.获取JavaBean属性的值2:
private static Object getproperty(Object obj,String sx)
throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
    Object oj=null;
        PropertyDescriptor pdp=new PropertyDescriptor(sx,obj.getClass());
        BeanInfo bi=Introspector.getBeanInfo(obj.getClass());
        //在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件,并将结果用一些控制标记表示。
        PropertyDescriptor[] pd=bi.getPropertyDescriptors();//获取所有属性的描述
        MethodDescriptor[] md=bi.getMethodDescriptors();//获取所有非私有方法的描述
        for (PropertyDescriptor p:pd) {
            System.out.println(p.getName() "----------");
            if(p.getName().equals(sx)){
                Method method=p.getReadMethod();
                oj=method.invoke(obj);//将方法作于某个对象
                break;
            }
        }
    return oj;
}
6.对JavaBean的复杂内省操作:
A).使用BeanUtils工具包操作JavaBean。       B).BeanUtils中的get和set方法都把值当做字符串来操作。              它支持属性链,一级一级地点下去。       C).javaBean可以它Map相互转换,key——value的转换。

posted @ 2013-03-22 09:12  我爱双截棍  阅读(122)  评论(0编辑  收藏  举报