该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

1.cglib

BeanGenerator beanGenerator = new BeanGenerator();

beanGenerator.addProperty("id", Long.class);

beanGenerator.addProperty("username", String.class);

Object obj = beanGenerator.create();

BeanMap beanMap = BeanMap.create(obj);

BeanCopier copier = BeanCopier.create(User.class, obj.getClass(), false);

User user = new User();

user.setId(1L);

user.setUsername("name1");

user.setPassword("123");

copier.copy(user, obj, null);

System.out.println(beanMap.get("username"));Class clazz = obj.getClass();

Method[] methods = clazz.getDeclaredMethods();for (int i = 0; i < methods.length; i++) {

System.out.println(methods[i].getName());

}

输出结果:

name1

getId

getUsername

setId

setUsername

从输出结果可以看出最后生成的obj只有id和username两个属性

2.org.apache.commons.beanutils

DynaProperty property = new DynaProperty("id", Long.class);

DynaProperty property1 = new DynaProperty("username", String.class);

BasicDynaClass basicDynaClass = new BasicDynaClass("user", null, newDynaProperty[]{property, property1});

BasicDynaBean basicDynaBean = new BasicDynaBean(basicDynaClass);

User user = new User();

user.setId(1L);

user.setUsername("name1");

user.setPassword("123");

BeanUtils.copyProperties(basicDynaBean, user);Map map = basicDynaBean.getMap();

Iterator it = map.keySet().iterator();while (it.hasNext()) { String key = it.next();

System.out.println(key + ":" + map.get(key));

}

输入结果:

id:1username:name1

查看BasicDynaBean与BasicDynaClass之间的关系

DynaBean的源码

public interface DynaBean {

public boolean contains(String name, String key);

public Object get(String name);

public Object get(String name, int index);

public Object get(String name, String key);

public DynaClass getDynaClass();

public void remove(String name, String key);

public void set(String name, Object value);

public void set(String name, int index, Object value);

public void set(String name, String key, Object value);

}

主要是接口的定义

再来看看BasicDynaBean是怎么实现的,直接看public Object get(String name);

/**

* Return the value of a simple property with the specified name.

*

* @param name Name of the property whose value is to be retrieved

* @return The property's value

*

* @exception IllegalArgumentException if there is no property

* of the specified name

*/public Object get(String name) { // Return any non-null value for the specified property

Object value = values.get(name); if (value != null) { return (value);

} // Return a null value for a non-primitive property

Class> type = getDynaProperty(name).getType(); if (!type.isPrimitive()) { return(value);

} // Manufacture default values for primitive properties

if (type == Boolean.TYPE) { return (Boolean.FALSE);

} else if (type == Byte.TYPE) { return (new Byte((byte) 0));

} else if (type == Character.TYPE) { return (new Character((char) 0));

} else if (type == Double.TYPE) { return (new Double(0.0));

} else if (type == Float.TYPE) { return (new Float((float) 0.0));

} else if (type == Integer.TYPE) { return (new Integer(0));

} else if (type == Long.TYPE) { return (new Long(0));

} else if (type == Short.TYPE) { return (new Short((short) 0));

} else { return (null);

}

}

从以上代码可以看出是在values里取值的

/**

* The set of property values for this DynaBean, keyed by property name.

*/

protected HashMap values = new HashMap();

其实是用HashMap来实现的.

3.总结

用cglib动态删除添加属性时,虽然obj里有getUsername这个方法,却不能obj.getUsername()这样直接调用,想得到username的值只能通过beanMap.get("username")获取.

org.apache.commons.beanutils从源码来看是使用HashMap来实现的.

两种方式从操作角度来说和使用Map的区别不大.只是它们都提供了复制属性的工具方法.

需要的留邮哦~

java动态删除属性值_JavaBean动态添加删除属性相关推荐

  1. 跨域 · 后台设置:头部header(服务器端添加属性、属性值,浏览器端获取属性及其值) - 数据篇

    跨域 · 后台设置:头部header自定义属性 (服务器端添加属性.属性值,浏览器端获取属性及其值) headers 服务端配置 # For more information on configura ...

  2. JQuery属性选择器(属性值是变量、多属性选择)

    结论: 1.属性值是变量时,$("div[属性 = "+变量+"]"):2.属性值是变量时,$(`div[属性 = ${变量}`):3.多属性选择器时,$(&q ...

  3. js动态给table表格的行添加删除线

    首先,要达到以下的效果 而不是在每个tr单元格添加css属性text-decoration,因为删除线要连续不间断. 利用添加一个设置属性了的div去实现 jsp代码: <%@ page lan ...

  4. 清除、删除、重置AD账户、OU属性值往AD的OU属性添加值

    问题: 今天用PowerShell小脚本把AD中OU的属性值"Co",填写了一个错误的值,但是重新覆盖填写时,会报错,然后就想到把该属性重置. 我写的属性如下图中圈出来的部门: 解 ...

  5. 【原创】清除、删除、重置AD账户、OU属性值往AD的OU属性添加值

    问题: 今天用PowerShell小脚本把AD中OU的属性值"Co",填写了一个错误的值,但是重新覆盖填写时,会报错,然后就想到把该属性重置. 我写的属性如下图中圈出来的部门: 解 ...

  6. 获取一个对象的属性/属性值,以及动态给属性赋值

    //定义类public class MyClass{public int Property1 { get; set; }public string Property2 { get; set; }} M ...

  7. Redis中哈希hash数据类型(增加修改(设置单一属性、设置多个属性)、获取(获取键所有属性、获取单一属性值、获取多个属性值)、删除、使用hash可能出现的问题)

    hash⽤于存储对象,对象的结构为属性.值 值的类型为string [应用:如购物车内某个宝贝的所有属性]  [help hset] 1. 增加.修改 1.1 设置单个属性 hset key fiel ...

  8. java set循环取值_java循环遍历类属性 get 和set值方法

    //遍历sqspb类 成员为String类型 属性为空的全部替换为"/" Field[] fields = sqspb.getClass().getDeclaredFields() ...

  9. java 操作属性值_java反射机制根据属性名获取属性值的操作

    一.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...

最新文章

  1. 父类引用指向子类对象
  2. solaris11 format zpool
  3. Zygote工作流程分析
  4. 数字能查出笔迹吗_大家都知道文字可以做笔迹鉴定,我想问一下专家阿拉伯数字是否也可以做笔迹鉴定正确率高吗?...
  5. 关于dev无法更新、调试的问题
  6. matlab中结束脚本运行_MATLAB脱单指南
  7. 孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2
  8. 设置元素浮动的几种方式
  9. ios9与ios8的区别
  10. 高考成绩真的可以改了?
  11. html模板导出pdf文件
  12. 读书笔记 - 富爸爸穷爸爸
  13. 7.ROS编程学习:自定义服务数据c++调用
  14. 按着Phoenix Framework文档练个手,感受一下Elixir语言。
  15. 微信气泡主题设置_微信气泡主题华为手机要怎么弄 华为手机微信气泡主题设置方法介绍...
  16. QT——Qt QtCreator 官方下载地址
  17. 基于最小均值 (LMF) 和最小均方 (LMS) 算法进行系统识别附matlab代码
  18. git push错误failed to push some refs to的解决
  19. 文字的纵向显示的问题 cdc drawtext
  20. 关于防止表单重复提交

热门文章

  1. Python 爬取 B 站 5000 条视频,揭秘为何千万人为它流泪!
  2. 鲍勃·维德拉:一位硬件工程师的叛逆传奇 | 人物志
  3. 微服务和数据库到底是什么关系?
  4. AI 帮程序员找 Bug,一键快速预测
  5. 为什么腾讯云要自研云原生数据库 CynosDB?
  6. Java 9 关注度不断上升!2018 编程语言流行度大调查
  7. 010.第一个回声服务器可能遇到的问题——connect函数
  8. c语言接收并回现字符,C语言——字符I/O与缓冲区
  9. 锐龙r54600虚拟linux,锐龙r5 4600u相当于i几 游戏设备问题解决分享!
  10. oracle语法_PG数据库sql语法总结,与Oracle有什么不同?