Java基础知识增强------javaBean
http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
一、概述
javaBean是一种特殊的java类,主要用于传递数据信息,这种java类中的方法主要用于
访问私有的字段,且方法名称符合某种命名规则。
如果两个模块之间传递多个参数信息,可以将这些信息封装到一个javaBean中,这种javaBean的实例对象通常称之为值对象(Value Object,简称VO)。这种信息在类中用私有字段来存储,如果读取或设置这些字段值,则需要通过一些相应的方法来访问,javaBean
的属性石根据其中的Setter和getter方法来确定的,而不是根据其中的成员变量。
如果方法名称为setId中文意思为设置ID值,如果方法名称为getId,中文意思为获得ID
值,去掉set前缀剩余部分就是属性名,如果剩余部分第二个字母是小写,则把剩余的部分首字母改为小写。
setId()的属性—>id
isLast()的属性名0—>last
setCPU的属性名—>CPU
总之,一个类被当作javaBean使用时,javaBean的属性石根据方法名推断出来的,它
根本看不到java类内部的成员变量。
一个符合javaBean特点的类可以当作一个普通类进行使用,但把它当作javabean用肯
肯定需要带来想二外的好处。好处:
在javaEE开发中,经常要使用到javaBean,很多环境就要按javaBean方式进行操作,别人都这么用和要求这么做。
JDK中提供了对javaBean进行操作的一些API,这套API就称为内省。如果要你
自己去通过getX方法来访问私有的x,用内省这套API操作javaBean比用普通类的
方式更方便。
内省对应的英文名称为IntroSpector,它主要用于对javaBean进行操作,javaBean
是一种特殊的java类,其中的某些方法符合某种命名规则,如果一个java类中的一些方法符合某种命名规则,则可以吧它当作javaBean来使用,
二、代码示例:
1.使用new 一个PropertyDescription 对象的方式来实现对javaBean API的调用。
package ClassDemo;
import java.beans.*;
import java.lang.reflect.*;
public class Inspector {
/**
* @param args
* 通过属性描述获取和设置javaBean的属性与方法调用
*/
public static void main(String[] args) {
Person person1 = new Person("n", 29, "1356");
String propertyName = "name";
javaBeanOperator(person1, propertyName);
}
private static void javaBeanOperator(Person obj, String propertyName) {
try {
PropertyDescriptor pDescriptor = new PropertyDescriptor(propertyName, obj.getClass());
Method method =pDescriptor.getWriteMethod();
try {
method.invoke(obj, "cang");
Method method2 = pDescriptor.getReadMethod();
Object object = method2.invoke(obj);
System.out.println(object);
} 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();
}
} catch (IntrospectionException e) {
throw new RuntimeException();
}
}
}
2.采用遍历BeanInfo的所有方式来查找和设置某个person对象的name属性,在程序中把一个类当作javaBean来看,就是调用InstroSpector.getBeanInfo方法,得到的BeanInfo
对象封装了把这个类当作JavaBean看的结果信息。
部分代码:
private static void javaBean(String propertyName, Object obj) {
try {
BeanInfo bInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor [] pDescriptors = bInfo.getPropertyDescriptors();
for(PropertyDescriptor ps : pDescriptors){
if((ps.getName()).equals(propertyName)){
Method method =ps.getWriteMethod();
try {
method.invoke(obj, "jsl");
System.out.println(ps.getReadMethod().invoke(obj));
} 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();
}
}
}
} catch (IntrospectionException e) {
throw new RuntimeException();
}
}