内省:javaBean
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
一、setId()的属性名?id
二、isLast()的属性名?last
三、setCPU的属性名是什么??CPU
四、getUPS的属性名是什么??UPS
PropertyDescriptor类.
常用方法
Method getReadMethod()
获得应该用于读取属性值的方法。 对应get()方法.
Method getWriteMethod()
获得应该用于写入属性值的方法。 对应set()方法.
构造函数 :PropertyDescriptor(String
propertyName, Class<?> beanClass)
参数:要查找的属性名,和其所属的类
练习:获取一个类中的Age的值
类 PropertyDescriptor:PropertyDescriptor 描述 Java Bean
通过一对存储器方法导出的一个属性。
public static void main(String[] args) throws Exception {
//使用反射的方式获取 。
//1.0 获取Class文件
//2.0 获取method(getAge):注意属性名的大小写转换
//使用反射的方式获取
Class clazz =Class.forName("cn.itcast.InspectorDemo");
InspectorDemo Inspector = (InspectorDemo)clazz.newInstance();
Method method = clazz.getMethod("getAge");
int age = (Integer)method.invoke(Inspector);
System.out.println(age);
//设置
Method method1 = clazz.getMethod("setName", String.class);
method1.invoke(Inspector, "zhangsan");
//获取设置后的值
Method method3 = clazz.getMethod("getName");
String name = (String)method3.invoke(Inspector);
System.out.println(name);
//2 使用javaBean获取 使用PropertyDescriptor类
String propertyName= "age";
//注意否早方法里面属性名是以小写字母开头。
PropertyDescriptor pd = new PropertyDescriptor(propertyName,cn.itcast.InspectorDemo.class);
Method methodgetAge = pd.getReadMethod();//read相当于get()方法。writer()相当于set()
InspectorDemo Inspector1 = new InspectorDemo();
Object retval = methodgetAge.invoke(Inspector1);
System.out.println(retval);
//通过javabean设置
Method methodsetAge =pd.getWriteMethod();
methodsetAge.invoke(Inspector1, 30);
}}
class InspectorDemo{
private int age=20;
private String name="lsisi";
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}}
注意:使用反射和内省获取成员的区别是:反射需要知道方法的名字和参数,而内省不需要。
Beanutils工具包
Beanttils.getProperty(Object bean,String name)
Beanttils.getProperty(Object bean,String name,String value)
这连个方法接收都是字符串,因为在javaWeb中通过;浏览器传输带数据都是字符串形式
beanutils方法的应用
BeanUtils.setProperty(rf1, "x",
"9");//数字用字符串形式表示。
BeanUtils.setProperty(rf1,
"birthday.time","111");//可以设置人的头的眼睛的颜色,逐级设置。
map对象和beanutils之间的相互转换。
java1.7 Map map = {map,key,value};
BeanUtils.setProperty(map, key, value)