JAVA 获取Bean对象的属性名和该属性对应的值

主要使用到了java.beans包下的类,利用底层反射来获取对象对应的属性和方法;

** BeanInfo **:提供有关Bean的显式信息的接口,其中包含类的属性,方法、事件等显式信息,可以通过Introspector底层反射机制获取


** Introspector **:用于构建一个一个全面描述目标bean的BeanInfo对象,使用低层次的反射来研究类的方法,并应用标准设计模式来标识属性存储器、事件源或公共方法。然后深入分析类的超类,并从它那里添加信息


** PropertyDescriptor ** :描述 Java Bean 通过一对存储器方法导出的一个属性以及该属性的getter和setter方法


相关实现代码:


  public void test(Project project){
        BeanInfo beanInfo;
        try{
            //throws IntrospectionException
            beanInfo=Introspector.getBeanInfo(project.getClass(), Object.class);
            if(beanInfo!=null){
                PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
                for(PropertyDescriptor p:propertyDescriptors){
                    //获得属性名称
                    System.err.println(p.getName());
                    //调用该属性名称对应的getter方法
                    //throws IntrospectionException,InvocationTargetException,IllegalAccessException
                    Object obj = new PropertyDescriptor(p.getName(), Project.class).getReadMethod().invoke(project);
                    //调用该属性名称对应的setter方法
                    //throws IntrospectionException,InvocationTargetException,IllegalAccessException
                    new PropertyDescriptor(p.getName(), Project.class).getWriteMethod().invoke(project,new Object[]{"1"});
                }
            }

        }catch (IntrospectionException e){

        }catch (InvocationTargetException e1){

        }catch (IllegalAccessException e2){

        }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,926评论 6 342
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan阅读 4,199评论 2 7
  • 声明方式 let局部声明 上面两个例子说明了let是局部变量声明,let声明只在区块内起作用,外部是不可以调用的。...
    AkiraSun阅读 199评论 0 0