1

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

谢谢!

4

1 回答 1

0

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

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

于 2009-08-25T04:55:34.767 回答