IntroSpector 内省用于操作JavaBean。
JavaBean是一个特殊的Java类,方法符合一定的规则,例如setAge(intage) getAge()。
classPerson{
privateint age;
public int getAge(){//javaBean的属性根据get和set方法推断出
return age;
}
public void setAge(int age){
this.age = age;
}
}
Age 如果第二个字母是小写的,则把第一个字母变成小写的age
gettime--> time
getCPU--> CPU
JavaBean的好处
在JavaEE中,经常使用到JavaBean。很多环境要求按JavaBean方式进行
JDK中提供了对JavaBean进行操作的一些API,这套API称为内省。
privatestaticvoid setProperty(Object obj, String propertyName,
Object value) throws IntrospectionException,
IllegalAccessException, InvocationTargetException {//根据对象和属性名,设置对象的属性值
PropertyDescriptor pd = newPropertyDescriptor(propertyName,obj.getClass());//获取属性描述
Method methodSetX = pd.getWriteMethod();//抽取方法
methodSetX.invoke(obj,value);//调用方法设置
}
privatestatic Object getProperty(Object obj,
String propertyName) throws IntrospectionException,
IllegalAccessException, InvocationTargetException {//根据对象和属性名,获取对象的属性值
// PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass());//获取属性描述
// Method methodGetX = pd.getReadMethod();//抽取方法
// Object retVal= methodGetX.invoke(obj);//调用方法取值
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());//获取BeanInfo
PropertyDescriptor[] pds =beanInfo.getPropertyDescriptors();//获取所有的属性描述
Object retVal = null;
for(PropertyDescriptor pd:pds){//遍历属性描述
if(pd.getName().equals(propertyName)){//如果找到需要的属性名
Method methodGetX = pd.getReadMethod();//获取方法
retVal = methodGetX.invoke(obj);//调用方法取值
break;
}
}
return retVal;
}
BeanUtils工具包
System.out.println(BeanUtils.getProperty(pt,"x"));
BeanUtils.setProperty(pt,"x","9");
System.out.println(BeanUtils.getProperty(pt,"x"));
BeanUtils.setProperty(pt,"birthDay.time","11");//支持属性链
System.out.println(BeanUtils.getProperty(pt,"birthDay.time"));
javabean可以和map可以使用BeanUtils互转
注解
相当于一种标记,加了注解就等于打上了某种标记,没加,则等于没打标记。以后在javac编译器开发工具等可以使用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上
从java.lang包中可以看到JDK提供的最基本的annotation
@SuppressWarnings//SOURCE
@Deprecated//RUNTIME
@Override//SOURCE
注解生命周期
@Retention(RetentionPolicy.RUNTIME)//内存字节码
//@Retention(RetentionPolicy.CLASS)//class文件
//@Retention(RetentionPolicy.SOURCE)//java文件
---------------------- android培训、java培训、期待与您交流! ----------------------