Java内省的学习

内省

内省是与反射类似的技术,它是以规范化的Java bean为模板,将类中的成员变量和getter、setter方法关联起来
它的一般用法是:
使用Java反射解析Java类的结构,把字段和该字段对应的setter、getter方法关联起来,封装到PropertyDescriptor(属性描述器)中。通过属性描述器可以直接获得该字段的setter、getter方法的Method对象,进而根据实际需要进行操作。

关于内省中常用类或方法的介绍与常见使用:

  • BeanInfo

Use the BeanInfo interface to create a BeanInfo class and provide explicit information about the methods, properties, events, and other features of your beans.
使用BeanInfo接口创建一个BeanInfo类,并提供关于bean的方法、属性、事件和其他特性的明确信息。

  • Introspector

The Introspector class provides a standard way for tools to learn about the properties, events, and methods supported by a target Java Bean.
内省类为工具提供了一种标准的方法来了解目标Java Bean所支持的属性、事件和方法。

  • PropertyDescriptor

PropertyDescriptor描述了通过一对访问器方法导出的Java Bean的一个属性。

常用方法:
getPropertyType():获取属性的数据类型
getReadMethod():获取属性的get方法
getWriteMethod() :获取属性的set方法

  • MethodDescriptor

常用方法:
getMethod():获取方法描述器中的方法

以下是代码:

public class User implements Serializable {
    private static final long serialVersionUID = -3015143840907090098L;
    private String name;
    private String age;

    public User(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

}
Class clazz=User.class;
Object obj=clazz.newInstance();

BeanInfo bean = Introspector.getBeanInfo(clazz); 

PropertyDescriptor[] descriptors =bean .getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : descriptors) {
    //我是试验时 这里输出属性名 多了class 应该是来自于Object
    //而serialVersionUID则没有输出 这跟getDeclaredFields()有些区别
    System.out.println(propertyDescriptor.getName());  
    //获得属性的set方法,并给出参数调用
    Method writeMethod = propertyDescriptor.getWriteMethod(); 
    writeMethod.invoke(obj, args);
    //获得属性的get方法,并调用
    Method readMethod = propertyDescriptor.getReadMethod();
    readMethod.invoke(obj);
}
MethodDescriptor[] methods = bean.getMethodDescriptors();
for (MethodDescriptor methodDescriptor : methods ) {
//获得了Method对象 就跟反射中的操作类似了
    Method method=methodDescriptor.getMethod();
}

以上若有解释不当或错误,请指出,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值