黑马程序员_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的转换。