java - 带有 addXX 方法的 BeanUtils

标签 java javabeans apache-commons-beanutils

我正在使用 Apache BeanUtils setProperty 方法以通用方式从 Excel 文件导入数据。我向解析器提供“列名称”和“属性名称”对的列表,然后解析器使用 setProperty(...,“属性名称”,...) 为与“列名称”匹配的 Excel 字段设置属性”。它工作得很好,但现在我遇到了问题,我有一个使用 addXXX() 方法设置的属性,但我无法更改该类。 如何在不更改此类或解析器的情况下设置此属性? 是否可以? 我可以使用 DynaClass、PropertyUtils 或 MethodUtils 制作类似包装器的东西,以便在设置该属性时调用 addXX 方法吗?

谢谢!

最佳答案

您可以编写一个装饰器 bean 类来包装您的类,并提供一个 setXXX() 方法,委托(delegate)给包装 bean 的 addXXX() 。您甚至可以在cglib的帮助下通过动态代理来做到这一点或任何其他字节码检测库。

如果您更愿意采用 DynaClass 方式,请查看 WrapDynaClass作为起点。您必须扩展它才能为您的方法提供自定义 PropertyDescriptor。不过,我不会这样做,有两个原因 - 首先,addXXX() 语义可能与 setXXX() 有很大不同;其次,整个 DynaClass/DynaBean 内部 API 有点困惑,而编写自己的装饰器类非常简单。

关于java - 带有 addXX 方法的 BeanUtils,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1326059/

相关文章:

java - 如何使用 BeanUtils.populate 方法从 String[] 转换为 ArrayList<String>?

java - 确定性生成 RSA 加密 key 对

java - Surefire 没有接受 Junit 4 测试

java - 错误 :Execution failed for task ':app:transformClassesWithMultidexlistForDebug' . 修复此问题

java - Struts 和 bean

java - 无法用JavaBeans制作程序来监听其他组件

java - 带有 map 的 BeanUtils

java - 使用 BeanUtils 复制属性时的类型转换?

java - 无法在 Java 应用程序中的 SODA 中添加的文档存储上进行 SELECT

java - CDI @Produces Javadoc 需求解释