内省: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)