`
chenzehe
  • 浏览: 538261 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包

 
阅读更多

JavaBean

      JavaBean主要用于传递数据信息,其方法用于访问私有变量,且方法名符合某种规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”。方法比较少。这些信息储存在类的私有变量中,通过set()、get()获得。

      内省主要是对JavaBean进行操作。JavaBean内部的方法要按照某种规则命名,例如void setAge(int age)、int getAge()。JavaBean可以作为普通类进行操作;普通类如果内部有set()、get()方法,也可以当做JavaBean使用。

JavaBean的属性是通过get()和set()方法推断出来的,即去掉get、set后的字母,例如,属性为age,而不是成员变量,因为成员变量看不见。获得属性名的规则:如果属性名的第二个字母是小写,则把第一个字母小写。例如,gettime—>time,setTime—>time,getCPU—>CPU。

JavaBean处理的好处:

1、JavaEE中许多地方需要使用JavaBean。

2、JDK给JavaBean提供的API称为内省。

更多JavaBean内容见之前blog


PropertyDescriptor类

PropertyDescriptor类表示JavaBean 类通过存储器导出一个属性 。主要方法:

1、getPropertyType (),获得属性的Class对象。

2、getReadMethod (),获得用于读取属性值的方法;getWriteMethod (),获得用于写入属性值的方法。

3、hashCode (),获取对象的哈希值。

4、setReadMethod (Method  readMethod),设置用于读取属性值的方法;setWriteMethod (Method writeMethod),设置用于写入属性值的方法;

 

通过属性名获取对应的值,利用反射方法,如下:

ReflectPoint pt1 = new ReflectPoint(7,9);
String propertyName = "x";//给一个属性,获取值
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX = pd.getReadMethod();//Read对应get()方法
Object reValue = methodGetX.invoke(pt1);

 给某个属性设置值,如下:

String propertyName2 = "y";//给一个属性,设置值
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2,pt1.getClass());
Method methodSetY = pd2.getWriteMethod();//Write对应set()方法
methodSetY.invoke(pt1,3);

 

Introspector类

      将JavaBean中的属性封装起来进行操作。在程序把一个类当做JavaBean来看,就是调用Introspector.getBeanInfo()方法,得到的 BeanInfo 对象封装了把这个类当做JavaBean 看的结果信息,即属性的信息

      getPropertyDescriptors(),获得属性的描述,可以采用遍历BeanInfo的方法,来查找、设置类的属性。

private static Object getProperty_2(Object pt1, String propertyName) throws Exception {  
    BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());        
    PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();  
    Object reValue = null; 
  for(PropertyDescriptor pd : pds){    
        if(pd.getName().equals(propertyName)){    
            Method methodGetX = pd.getReadMethod();
            reValue = methodGetX.invoke(pt1);
            break;
        }
    }
    return reValue;
} 

      通过这两个类的比较可以看出,都是需要获得PropertyDescriptor,只是方式不一样:前者通过创建对象直接获得,后者需要遍历,所以使用PropertyDescriptor类更加方便。

 

BeanUtils工具包

为JavaBean提供更多、放方便的功能。

beanutils.jar = beanutils-core.jar + beanutils-bean-collections.jar,可以通过BuildPath,添加额外的jar包,或者工程下建立lib目录,将jar 包复制进来,再加载这个jar包:右键—》add to BuildPath。使用时需要导包:org.apache.commons.beanutils.BeanUtils。

需要配合使用acpche提供的日志包:logging

获得属性的值,例如,BeanUtils.getProperty (pt1,"x"),返回字符串

设置属性的值,例如,BeanUtils.setProperty (pt1,"y",22),参数是字符串或基本类型自动包装。设置属性的值是字符串,获得的值也是字符串,不是基本类型。

BeanUtils的特点:

1、对基本数据类型的属性的操作:在WEB开发、使用中,录入和显示时,值会被转换成字符串,但底层运算用的是基本类型,这些类型转到动作 由BeanUtils自动完成。

2、对引用数据类型的属性的操作:首先在类中必须有对象,不能是 null ,例如,private  Date birthday=new  Date();。操作的是对象的属性而不是整个对象 ,例如,BeanUtils.setProperty (pt1,"birthday.time",121);

Java7的新特性:Map 和JavaBean 之间可以进行相互转换 ,key是属性,value是值。

describe:JavaBean—>Map;populate:Map—>JavaBean。例如:

Map map = (name:Kim,age:18);

BeanUtils.setProperty(map,"name","Kim");

copyProperties(Object desc,Object orig):将一个对象的属性值复制到另一个对象的属性,需要保证属性一致。

 

PropertyUtils类

和BeanUtils不同在于,运行getProperty、setProperty操作时,没有类型转换 ,使用属性的原有类型或者包装类。

 

 

具体使用见blog 模拟Spring属性的注入

 

 

分享到:
评论

相关推荐

    JavaBean和beanutils工具类的学习

    JavaBean和BeanUtils工具类是Java开发中常用的技术,它们主要应用于对象属性的访问和操作。JavaBean是一种规范,用于创建可重用的组件,它的核心特点是在类中定义私有成员变量,并提供对应的getter和setter方法来...

    BeanUtils工具类的Jar包

    在JavaWeb开发中,BeanUtils工具类扮演着重要的角色,它是Apache Commons项目的一部分,具体是Apache Commons BeanUtils库。这个库提供了一系列方便的方法,用于处理JavaBeans,即那些符合JavaBeans规范的对象。在这...

    commons-beanutils使用工具包

    commons-beanutils使用工具包

    beanutils工具类

    `BeanUtils`工具类是Apache Commons项目中的一个组件,它为Java开发提供了一种便捷的方式来操作JavaBean属性,极大地简化了使用反射API的工作。在Java编程中,JavaBean是一种遵循特定规则的对象,通常用于封装数据并...

    beanutils的jar包

    Apache Commons BeanUtils是Java开发中一个非常实用的工具库,主要功能是简化JavaBean对象的操作。这个"beanutils的jar包"是1.93版本,它包含了对bean操作的各种方法,同时也集成了log包,方便开发者进行日志记录,...

    Json一键转Javabean工具

    此外,对于动态生成的JSON数据,这样的工具也提供了很好的灵活性,无需每次都手动创建新的JavaBean类。 总之,"Json一键转Javabean工具"是Java开发者的得力助手,它简化了JSON数据到Java对象的转换过程,降低了开发...

    BeanUtils工具类

    BeanUtils工具类通过反射机制实现了对JavaBean的属性设置。例如,我们有一个User类,包含name和age属性,我们可以用以下方式设置属性值: ```java User user = new User(); BeanUtils.setProperty(user, "name",...

    Spring-BeanUtils工具类

    Spring BeanUtils工具类是Spring框架中的一个重要组成部分,它基于Apache Commons BeanUtils库,提供了一种简单而便捷的方式来处理JavaBean的属性。这个工具类极大地简化了对象之间属性的复制、类型转换以及对...

    JavaWeb开发技术-BeanUtils工具.pptx

    首先,BeanUtils工具依赖于一个logging包,这个logging包可以是Apache的log4j或其他兼容的日志实现,用于输出在使用BeanUtils过程中可能产生的日志信息,帮助开发者调试和诊断问题。因此,在使用BeanUtils之前,确保...

    Java Web程序设计入门课件-BeanUtils工具.pptx

    BeanUtils工具的核心是`org.apache.commons.beanutils.BeanUtils`类。这个类提供了大量静态方法,用于复制对象属性、设置和获取JavaBean的属性值。BeanUtils的设计理念是基于反射机制,它可以根据对象的属性名动态地...

    BeanUtils-jar包

    在Java开发中,BeanUtils-jar包扮演着重要的角色,它是Apache Commons项目中的一个模块,主要为开发者提供了方便、高效的JavaBean操作工具。这个jar包的核心功能是简化了JavaBean属性的设置、获取以及复制等操作,极...

    beanUtils jar包

    BeanUtils工具包是Java开发中的一个非常重要的辅助库,它主要由Apache软件基金会的Commons项目维护。在Java世界里,BeanUtils是为了简化对JavaBeans的属性操作而设计的,它极大地提高了开发者的工作效率,降低了代码...

    javabean工具类.rar

    在本资源"javabean工具类.rar"中,提供了一个工具,该工具能够根据数据库表自动生成对应的JavaBean类,这大大简化了开发过程,减少了手动编写代码的工作量。支持的数据库包括MYSQL、ORACLE和SQLSERVER,涵盖了广泛的...

    BeanUtils工具类的使用.zip

    本资源包主要围绕`BeanUtils`工具类的使用进行讲解,旨在帮助开发者更好地理解和应用这个工具类。 首先,`BeanUtils`的核心功能是基于JavaBean规范,它提供了方便的方法来处理Java对象的属性。JavaBean是一种遵循...

    BeanUtils工具

    BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品。beanUtils 可以便于对javaBean的属性、对象进行赋值,beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

    beanutils-1.9.3-bin

    在由JDK提供的默认的API中,有java.beans包,里面有诸如Introspector,BeanInfo,PropertyDescriptor等用来操作JavaBean的方法, 但是由Apache公司开发的BeanUtils会更常用,同时,BeanUtils还需要配合第三方日志...

    json转javaBean工具类

    自己写的一个json生成JavaBean工具类,需要有fastJson依赖存在才能使用,通过输入读取json数据的文本地址和输出javaBean文件的地址,执行Json2BeanUtil类的json2Bean方法,可自动生成JavaBean,需要自己手动导入各...

    beanutils类

    这个包主要提供用于操作JavaBean的工具类,Jakarta-Common-BeanUtils的主要功能都在这个包里实现。

    beanutils的jar包.zip

    在Java开发中,BeanUtils库是一个非常重要的工具包,它主要由Apache Commons项目提供,用于简化JavaBean对象的操作。在给定的“beanutils的jar包.zip”中,包含的jar包是Apache Commons BeanUtils的核心库,这个库...

Global site tag (gtag.js) - Google Analytics