java动态创建实体类,java对象动态增加属性

  java动态创建实体类,java对象动态增加属性

  

目录

添加依赖代码测试可以给已有实体类动态的添加字段并返回新的实体对象,不影响原来的实体对象结构。

 

  

添加依赖

依赖关系groupId cglib/groupId artifactIdcglib/artifactId版本2 .2 .2/版本/依赖关系groupId commons-bean utils/groupId artifact id commons-bean utils/artifact id版本1 . 9 . 4/版本/依赖性

 

  

代码

导入com。谷歌。常见。收藏。地图;导入网。SF。cglib。豆子。bean生成器;导入网。SF。cglib。豆子。豆子地图;导入org。阿帕奇。公地。豆制品。属性utils bean导入org。slf4j。记录者;导入org。SLF 4j。伐木工厂;导入Java。豆子。属性描述符;导入Java。util。地图;/** * 动态为豆添加字段* @ Author gongl * @ Create 2022-01-11 */public class DynamicBeanUtils { private static final Logger=Logger factory。获取记录器(DynamicBeanUtils。类);公共静态对象getTarget(Object dest,MapString,Object add properties){ property ils bean property ils bean=new property ils bean();//得到原对象的属性属性描述符[]描述符=属性实用程序bean。getproperty描述符(dest);MapString,Class?属性映射=映射。new hashmap();用于(属性描述符d :描述符){如果(!类。equalsIgnoreCase(d . getname()){属性映射。put(d . getname(),d . getpropertytype());} } addProperties.forEach((k,v) - propertyMap.put(k,v . getclass()));//构建新的对象动态bean动态bean=新动态bean(目标。getclass()、属性映射);对于(图。同学们:入口属性图。entry set()){ try { if(!添加属性。包含密钥(条目。getkey()){//原来的值动感豆。setvalue(条目。getkey()、属性utils bean。getnested property(dest,entry。getkey());}else {//新增的值动感豆。setvalue(条目。getkey()),添加属性。获取(条目。getkey());} } catch(异常e){ logger。error(e . getmessage(),e);} }返回动感豆。get target();}私有静态类动态Bean { /** *目标对象*/私有对象目标;/** * 属性集合*/私有bean map bean map公共动态豆子(类。超类,映射字符串,类属性图){这个。target=生成bean(超类,属性图);这个。bean map=bean map。创建(这个。目标);} /** * bean添加属性和值* * @ param property * @ param value */public void setValue(String属性,Object值){ bean map。put(属性,值);} /** * 获取属性值* * @ param property * @ return */public Object getValue(String property){ return bean map。get(属性);} /** * 获取对象* * @ return */public Object get target(){ return this。目标;} /** * 根据属性生成对象* * @param超类* @ param属性映射* @ return */私有对象生成bean(类?超类,映射字符串,类属性图){ bean generator generator=new bean generator();if (null!=超类){ generator。设置超类(超类);} bean生成器。添加属性(生成器、属性映射);返回发电机。create();} }}

 

  

测试

公共静态类TestBean{私有字符串名称;公共字符串getName(){ return name;} public void set name(String name){ this。name=名称;} }公共静态void main(String[] args)抛出InvocationTargetException,IllegalAccessException { test bean bean=new test bean();bean.setName(张三);MapString,Object map=new HashMap();map.put(年龄,29);//添加参数age-29 Object obj=dynamicbeanutils。获取目标(bean,map);//打印结果method[]声明的方法=obj。getclass().getDeclaredMethods();for(Method方法:声明的方法){ if(Method。getname().以( get ){ Object o=method开头。调用(obj);System.out.println(属性值得到方法- o);} } }结果打印出名字和年龄的值

 

  到此这篇关于爪哇为实体类动态添加属性的方法详解的文章就介绍到这了,更多相关爪哇实体类添加属性内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: