【发布时间】:2011-04-25 18:53:58
【问题描述】:
我正在寻找一个 commons beanutils 替代品。 原因是 beanutils 依赖于与我正在使用的现有库冲突的 commons-logging。
我想要一个小的独立替代方案,它不会引起/最小的冲突。
我追求的主要功能是嵌套属性检索。
提前致谢, 史蒂文
【问题讨论】:
标签: java apache-commons-beanutils
我正在寻找一个 commons beanutils 替代品。 原因是 beanutils 依赖于与我正在使用的现有库冲突的 commons-logging。
我想要一个小的独立替代方案,它不会引起/最小的冲突。
我追求的主要功能是嵌套属性检索。
提前致谢, 史蒂文
【问题讨论】:
标签: java apache-commons-beanutils
Jodd 有很好的图书馆收藏,看看Jodd BeanUtil 是否有帮助。
【讨论】:
如果你使用的是 Maven,你可以像这样排除 commons-logging 依赖:
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
我对 Spring 做了同样的事情,它也需要公共日志记录。事实上 Spring 自己 taught me how to exclude it。据我所知,我现在拥有一个无公共日志记录的环境。
更新:对于 SLF4J / Logback 之类的东西,您可能还需要在配置文件中使用它:
<logger name="org.apache.commons" level="OFF" />
【讨论】:
虽然属性处理不是Jackson 的主要关注点,但可以根据this article 使用它。
基本思想是,您不仅可以从 POJO 读取/写入 JSON,还可以进行兼容转换:包括将 POJO“序列化”为 Java Map。由于您可以在表示之间来回切换,因此您基本上可以免费获得一个 bean introspector。
Jackson 没有外部依赖项,但您需要核心(流式处理 api、impls)和映射器 jar(数据绑定)。
【讨论】:
最终编写了我自己的迷你 beanutils 来解决这种依赖关系并完全删除了 commons-beanutils。
SLF4J 最终没有提供帮助,因为它破坏了一些其他依赖项(该死的 weblogic!)。
我自己的实现可能更慢,因为 commons-beanutils 似乎缓存了一些获取以删除一些反射调用。
如果您有兴趣获取我的实现的源代码,请联系我。
【讨论】:
您可以通过使用备用公共日志记录bridge implementation provided by SFL4j 来解决与公共日志记录的冲突。
通常,将 commons-logging.jar 替换为 jcl-over-slf4j.jar 将立即永久解决与公共日志记录相关的类加载器问题。
【讨论】: