JavaBean是一个特殊的类,类里面的方法都是get...()和set...()类型的。符合这种特殊命名规则的java类称为javaBean。
可以通过get,set方法推断JavaBean里有的属性。
推断属性时,去掉方法的get,和set,剩下的名称,就是这个JavaBean的属性名。
在应用这个属性名时,
如果第二个字母是小写,要将这个名称第一个字母改成小写。Age——age
如果第二个字母是大写,不用改。CPU——CPU
总之,一个类被当做JavaBean使用时,JavaBean的属性时根据方法名推断出来的,它根本看不到java类中的成员变量
一个符合JavaBean特点的类可以当作普通类一样进行使用,但当作JavaBean用肯定需要带来一些额外好处。
好处:
1.在JavaEE开发中,经常要使用到JavaBean,很多环境就要求按JavaBean方式进行操作。
2.JDK中提供了对JavaBean进行操作的一些API,这套API被称为内省。用这套内省API操作JavaBean,比用普通类更为方便。
/**
* @param args
* @throws IntrospectionException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
* @throws InstantiationException
*/
public static void main(String[] args) throws Exception {
Class clazz=BeanDemo.class;
Object obj=clazz.newInstance();
String propertyName="name";
String value="xiaoqiang";
setProperty(obj,propertyName,value);
getProperty(obj,propertyName);
}
/**
* 通过内省的方法设置属性值
* @param obj 属性所属的对象
* @param propertyName 属性名称
* @param value 需要设置的属性值
* @throws Exception
*/
private static void setProperty(Object obj, String propertyName,
String value) throws Exception {
PropertyDescriptor pd=new PropertyDescriptor(propertyName, obj.getClass());
Method method=pd.getWriteMethod();
method.invoke(obj, value);
}
/**
* 通过内省的方式获得属性值
* @param obj 属性所属的对象
* @param propertyName 属性名称
* @throws Exception
*/
public static void getProperty(Object obj, String propertyName) throws Exception {
PropertyDescriptor pd=new PropertyDescriptor(propertyName, obj.getClass());
Method method=pd.getReadMethod();
Object retVal=method.invoke(obj);
System.out.println(retVal);
}