java bean的反射类_JAVA中反射机制五(JavaBean的内省与BeanUtils库)

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

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

例如类UserInfo :

48304ba5e6f9fe08f3fa1abda7d326ab.png

package com.peidasoft.instrospector;

public class UserInfo {

private long userId;

private String userName;

private int age;

private String emailAddress;

public long getUserId() {

return userId;

}

public void setUserId(long userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getEmailAddress() {

return emailAddress;

}

public void setEmailAddress(String emailAddress) {

this.emailAddress = emailAddress;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

在类UserInfo中有属性userName,那我们可以通过getUserName, setUserName来得到其值或者设置新的值。通过getUserName/setUserName来访问userName属性,这就是默认的规则。Java JDK中提供了一套API用来访问某个属性的getter/setter方法,这就是内省。

JDK内省类库:

PropertyDescriptor类:(属性描述器)

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

1. getPropertyType(),获得属性的Class对象;

2. getReadMethod(),获得用于读取属性值的方法;

3. getWriteMethod(),获得用于写入属性值的方法;

4. hashCode(),获取对象的哈希值;

5. setReadMethod(Method readMethod),设置用于读取属性值的方法;

6. setWriteMethod(Method writeMethod),设置用于写入属性值的方法。

实例代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

package com.peidasoft.instrospector;

import java.beans.BeanInfo;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.lang.reflect.Method;

public class BeanInfoUtil {

// 设置bean的某个属性值

public static void setProperty(UserInfo userInfo, String userName) throws Exception {

// 获取bean的某个属性的描述符

PropertyDescriptor propDesc = new PropertyDescriptor(userName, UserInfo.class);

// 获得用于写入属性值的方法

Method methodSetUserName = propDesc.getWriteMethod();

// 写入属性值

methodSetUserName.invoke(userInfo, "wong");

System.out.println("set userName:"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值