黑马程序员_内省和JavaBean笔记
2014-07-12 09:37
369 查看
------- android培训、java培训、期待与您交流! ----------
下面的例子里定义了一个Person类,它有一个age属性。这个类就符合JavaBean的书写规范,可以看成是一个JavaBean。
我们可以知道这个类有一个setAge方法和一个getAge方法。由于它是一个JavaBean,所以我们就可以从方法名字中提取出它的属性名。
javaBean的应用:
在开发中,我们经常需要将一个模块中的数据传递到另一个模块中去,我们就把这些传递的数据当成一个JavaBean来处理。这种JavaBean类的实例化对象称为值对象VO(Value Object)。
首先我们先定义一个JavaBean类
我们只知道这个类的属性名,存放在一个字符串中,我们要得到它的值,必须要先把它转化为get方法的名字,然后通过方法的反射调用获得它的值。内省用它的一套办法简化了上面这个操作。
下面用内省的方式操作JavaBean。
获取age的值
另外一种较为复杂的获取值的实现方法:(读取类似)
BeanUtils工具包需要到apache官网下载,而且还需要一个logging的工具包。
下面是用BeanUtils对JavaBean进行get和set,注意虽然age的值是int类型,但是我们我们需要传入字符串类型
假设上面的age是Date()类型的,Date()有一个方法是setTime(),也就是有一个time的属性,那么:
其他:
1. JavaBean和Map之间可以互相转化
2. PropertyUtils与BeanUtils在设置属性上类似,但是PropertyUtils操作的不是字符串,而是属性的原本类型。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
JavaBean
JavaBean是一种特殊的符合一种特殊书写方式的Java类。JavaBean的属性可以由get和set方法推断得到。get和set方法的名称书写规范是get+JavaBean的属性名、set+JavaBean的属性名。这个类的成员变量(与JavaBean的属性名不是一回事)起什么名字无所谓,因为成员变量是私有的,外界看不到。下面的例子里定义了一个Person类,它有一个age属性。这个类就符合JavaBean的书写规范,可以看成是一个JavaBean。
我们可以知道这个类有一个setAge方法和一个getAge方法。由于它是一个JavaBean,所以我们就可以从方法名字中提取出它的属性名。
public class Person { //成员变量 private int x; //set方法 public void setAge(int age){ x = age; } //get方法 public int getAge(){ return x; } }
javaBean的应用:
在开发中,我们经常需要将一个模块中的数据传递到另一个模块中去,我们就把这些传递的数据当成一个JavaBean来处理。这种JavaBean类的实例化对象称为值对象VO(Value Object)。
Introspector内省
下面我们用内省的方式操作JavaBean首先我们先定义一个JavaBean类
public class Person { private int x; private int y; Person(){} public Person(int age, int height){ this.x = age; this.y = height; } public int getAge() { return x; } public void setAge(int age) { this.x = age; } public int getHeight() { return y; } public void setHeight(int height) { this.y = height; } }
我们只知道这个类的属性名,存放在一个字符串中,我们要得到它的值,必须要先把它转化为get方法的名字,然后通过方法的反射调用获得它的值。内省用它的一套办法简化了上面这个操作。
下面用内省的方式操作JavaBean。
获取age的值
//创建对象 Person p1 = new Person(24,178); //对象的属性名存在字符串中 String propertyName = "age"; //把Person作为JavaBean,通过内省的方法操作JavaBean PropertyDescriptor pd = new PropertyDescriptor(propertyName, p1.getClass()); //得到Person对应属性名的get方法 int retVal = (int)pd.getReadMethod().invoke(p1); //打印 System.out.println(retVal);修改height的值
//属性名 String propertyName2 = "height"; //内省的方式操作javaBean PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, p1.getClass()); //获得对应属性的set方法,反射方式调用 pd2.getWriteMethod().invoke(p1, 180);
另外一种较为复杂的获取值的实现方法:(读取类似)
BeanInfo beanInfo = Introspector.getBeanInfo(p1.getClass()); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); Object retVal = null; for(PropertyDescriptor pd : pds){ if(pd.getName().equals(propertyName)){ retVal = (Object)pd.getReadMethod().invoke(p1); break; } } System.out.println(retVal);
BeanUtils工具包
apache为JavaBean的操作提供了BeanUtils工具包,简化操作。BeanUtils工具包需要到apache官网下载,而且还需要一个logging的工具包。
下面是用BeanUtils对JavaBean进行get和set,注意虽然age的值是int类型,但是我们我们需要传入字符串类型
//set BeanUtils.setProperty(p1,"age","35"); //get System.out.println(BeanUtils.getProperty(p1, "age"));如果一个JavaBean对象的属性又是一个JavaBean对象,我们可以用属性级联的方式对其进行get和set。
假设上面的age是Date()类型的,Date()有一个方法是setTime(),也就是有一个time的属性,那么:
//set BeanUtils.setProperty(p1,"age.time","35"); //get System.out.println(BeanUtils.getProperty(p1, "age.time"));
其他:
1. JavaBean和Map之间可以互相转化
2. PropertyUtils与BeanUtils在设置属性上类似,但是PropertyUtils操作的不是字符串,而是属性的原本类型。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
相关文章推荐
- 黑马程序员_类加载器、内省、JavaBean、BeanUtil学习笔记
- 黑马程序员Java学习笔记__javaBean的内省机制
- 黑马程序员_javaBean的内省操作
- 黑马程序员----加载配置文件和通过内省方式操作javabean总结
- 黑马程序员:Java基础总结----JavaBean 内省
- 黑马程序员————高新技术————内省(了解JavaBean)
- 黑马程序员——内省JavaBean总结
- 黑马程序员-内省和JavaBean
- 黑马程序员-----程序员之路_____JavaBean与内省、注解
- 黑马程序员-笔记-反射与内省
- 黑马程序员_基础加强(内省 JavaBean)
- 黑马程序员:内省(IntroSpector)与JavaBean的介绍
- 黑马程序员-------高薪笔记----内省机制(IntorSpector)----javabean
- 黑马程序员__内省和JavaBean
- 黑马程序员-Java基础加强-内省→了解JavaBean
- 黑马程序员:Java基础总结----JavaBean 内省
- 黑马程序员_第六天_高新技术之理解对JavaBean的内省操作
- 黑马程序员__JAVA高新技术--枚举及内省JavaBean、可变参数等知识点总结
- 黑马程序员_基础加强(4) 内省 & javaBean
- 黑马程序员--07.JavaBean--02【JavaBean的复杂内省操作】【第三方类库BeanUtils操作JavaBean】