千家信息网

Java反射中java.beans包的用法

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍"Java反射中java.beans包的用法",在日常操作中,相信很多人在Java反射中java.beans包的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2025年11月07日Java反射中java.beans包的用法

这篇文章主要介绍"Java反射中java.beans包的用法",在日常操作中,相信很多人在Java反射中java.beans包的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java反射中java.beans包的用法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

看一个例子:

NodeDO.java:一个标准的javabean对象

public class NodeDO {        private String name;        private String email;        private Date date;        public String getName() {                return name;        }        public void setName(String name) {                this.name = name;        }        public String getEmail() {                return email;        }        public void setEmail(String email) {                this.email = email;        }        public Date getDate() {                return date;        }        public void setDate(Date date) {                this.date = date;        }        @Override        public String toString() {                return "NodeDO [name=" + name + ", email=" + email + ", date=" + DodeDOEditor.sdf.format(date) + "]";        }}

TestDO.java一样,里面引用了NodeDO:

public class TestDO {   private String nodeName;   private NodeDO nodeDO;   public String getNodeName() {     return nodeName;   }   public void setNodeName(String nodeName) {     this.nodeName = nodeName;   }   public NodeDO getNodeDO() {     return nodeDO;   }   public void setNodeDO(NodeDO nodeDO) {     this.nodeDO = nodeDO;   } }

我们想实现类似这样的功能:

public static void main(String[] args) throws Exception{     Map parameters = new HashMap(){       {         put("nodeName", "小胖测试");         put("nodeDO", "xiaopang|xiaopang@163.com|2015-10-20 12:00:00");       }     };      TestDO testDo = convert(parameters);     System.out.println(testDo.getNodeName());     System.out.println(testDo.getNodeDO());   }

把parameters这个map转化成TestDO的对象,该如何来做呢?

(1)首先要定义一个用来转化Property的PropertyEditor:

public class DodeDOEditor extends PropertyEditorSupport{      public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      @Override   public void setAsText(String text) throws IllegalArgumentException{     String[] tokens = text.split("\\|");     NodeDO nodeDo = new NodeDO();     nodeDo.setName(tokens[0]);     nodeDo.setEmail(tokens[1]);     try{       nodeDo.setDate(sdf.parse(tokens[2]));     }catch(ParseException e){       throw new IllegalArgumentException(e);     }     setValue(nodeDo);   } }

(2)做转化:

public class PropertyEditorSample {    static{     PropertyEditorManager.registerEditor(NodeDO.class, DodeDOEditor.class);   }      public static void main(String[] args) throws Exception{     Map parameters = new HashMap(){       {         put("nodeName", "小胖测试");         put("nodeDO", "xiaopang|xiaopang@163.com|2015-10-20 12:00:00");       }     };      TestDO testDo = convert(parameters);     System.out.println(testDo.getNodeName());     System.out.println(testDo.getNodeDO());   }    private static TestDO convert(Map parameters)throws Exception {     TestDO testDO = new TestDO();     BeanInfo bi = Introspector.getBeanInfo(TestDO.class);      PropertyDescriptor[] pds = bi.getPropertyDescriptors();      for(PropertyDescriptor pd : pds){       Class propertyType = pd.getPropertyType();       Method writeMethod = pd.getWriteMethod();       if(propertyType == Class.class){         //ignore       }else if(propertyType == String.class){         writeMethod.invoke(testDO, parameters.get(pd.getName()));       }else{         PropertyEditor editor = PropertyEditorManager.findEditor(propertyType);         if(editor != null){           editor.setAsText(parameters.get(pd.getName()));           writeMethod.invoke(testDO, editor.getValue());         }else{           System.out.println("no editor for:"+pd.getName());         }       }     }     return testDO;   }  }

其实关键点就两句话

editor.setAsText(parameters.get(pd.getName()));//1 editor.getValue();//2 //因此,一般都会在setAsText中去调用setValue()来保存转化以后的值,这样通过getValue()就能获取到了

到此,关于"Java反射中java.beans包的用法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

反射 学习 对象 更多 小胖 帮助 测试 实用 接下来 例子 关键 关键点 功能 文章 方法 标准 理论 知识 篇文章 网站 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术开发合同范本专业版 企知道 专利数据库 硬盘数据库修复 飙车世界服务器不显示什么 梦幻西游湖北区的服务器虚拟主机 焦点访谈网络安全防火墙 怎样优化网络技术 软件开发需要的工时怎么预估 泰和软件开发有限公司怎么样 查看服务器有多少ssd 服务器能过地铁安检吗 互联网是高科技产物 网络安全在抗击疫情中的作用 数据库使用冗余技术 服务器管理软件怎么看 非结构化的数据库 张店资产管理软件开发公司 学linux好还是学网络安全好 绍兴通信网络技术创新服务 播放网络安全的手抄报 ipad苹果服务器出错怎么办 寿光市公安局网络安全员 用创新技术构建网络安全体系 多媒体信息网络技术有限公司 现代的网络技术 英语作文 中小学网络安全宣传周活动 福建通用软件开发收费 亚博服务器在哪里 数据库设计技术可行性 数据库分布式和集群区别
0