您的位置:首页 > 编程语言 > Java开发

Java_反射_内省JavaBean

2013-05-17 14:36 483 查看
 

1.JavaBean概述

        内省(IntroSpector)是Java 语言对 Bean 类属性、事件的一种缺省处理方法。

public class Person
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}

       例如上面一个Person类,有一个私有的成员name,存在一个get和一个set方法来对name进行获取和设定,可以通过反射更简便的获取相应字段的读和写方法

2.JavaBean内部实现过程
       Java 中提供了一套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要了解这个规则,这些 API 存放于包 java.beans 中!
       机制分析:需要对什么属性操作(name),分别对应(getName 和 setName),然后通过反射找到方法,通过普通的反射也可完成!
       即: name-->Name-->getName()(或setName())-->返回Method(通过反射机制)
       (getTime->time,getUDP->UDP(由于第二个字母为大写,故第一个字母保持原样))

3.JavaBean使用的两种方式

/*较复杂的*/
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);//获得一个类的BeanInfo
PropertyDescriptor[] pros = beanInfo.getPropertyDescriptors();//得到该类的所有属性描述信息
for(PropertyDescriptor pro: pros)
{
if(pro.getName().equals("name"))//判断某一个实现描述器的名称是否等于所需要的;
{
Method m = pro.getReadMethod();//得到与name对应的get方法,即getName()方法
Method m1 = pro.getWriteMethod();//得到与name对应的set方法,即setName()方法
System.out.println(m.invoke(p));//对获取的Method对象的实现
break;
}
}
/*较简单的*/
PropertyDescriptor pro = new PropertyDescriptor("name", p.getClass());//字段和类Class
Method m1 = pro.getReadMethod();//得到 get方法
Method m1 = pro.getWriteMethod();//得到 set方法
System.out.println(m1.invoke(p));

4.BeanUtils工具
       还可以使用工具BeanUtils(Download BeanUtils Download
Commons Logging


       BeanUtils.setProperty(p, "age", "120");//类对象--对应字段(接收字符串)--接收Obj(set方法接收的参数,为Object类型)

       BeanUtils.getProperty(p, "age");//类对象--对应字段(接收字符串)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: