----------------- android培训、java培训、期待与您交流! -----------------
内省
1. JavaBean
package introSpector;
public class IntroSpectorDemo {
// javaBean符合特殊格式的类。 方法的名字以get或者set开头
// 通过get和set方法判断属性。
// Age-->如果第二个字母是小的,则把第一个字母变成小的-->age
// gettime-->time
// getCPU-->CPU
// setTime-->time
// getCpU-->cpU
public static void main(String[] args) {
}
/*一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,我们才会去了解和应用JavaBean!好处如下:
在Java EE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和要求这么做,那你就没什么挑选的余地!
JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来访问私有的x,怎么做,有一定难度吧?用内省这套api操作JavaBean比用普通类的方式更方便。
*/
}
2. 内省的综合案例
private static void method2() throws Exception {
// BeanInfo代表了 java类的细节。
BeanInfo beanInfo = Introspector.getBeanInfo(ReflectPoint.class);
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
String popertyName=null;
ReflectPoint p = new ReflectPoint(11, 2);
for(PropertyDescriptor pd:pds){
if(pd.getName().equals(popertyName)){
Method method1 = pd.getReadMethod();
String retVal = (String) method1.invoke(p);
System.out.println(retVal);
}
}
}
private static void method1() throws IntrospectionException,
IllegalAccessException, InvocationTargetException {
// 通过PropertyDescriptor获取属性的基本信息。内部用了反射。
ReflectPoint p = new ReflectPoint(6, 7);
PropertyDescriptor pd = new PropertyDescriptor("x",ReflectPoint.class);
Object retVal = pd.getReadMethod().invoke(p);
System.out.println(retVal);
pd.getWriteMethod().invoke(p, 8);
System.out.println(p.getX());
}
3. BeanUtils工具包
演示用eclipse如何加入jar包,先只是引入beanutils包,等程序运行出错后再引入logging包。
在前面内省例子的基础上,用BeanUtils类先get原来设置好的属性,再将其set为一个新值。
get属性时返回的结果为字符串,set属性时可以接受任意类型的对象,通常使用字符串。
用PropertyUtils类先get原来设置好的属性,再将其set为一个新值。
get属性时返回的结果为该属性本来的类型,set属性时只接受该属性本来的类型。
演示去掉JavaBean(ReflectPoint)的public修饰符时,BeanUtils工具包访问javabean属性时出现的问题。