当您需要将多个类型作为源传递时,实现Spring Converter接口的最佳方法[关闭]

问题描述 投票:0回答:1

您经常需要从一堆源代码对象中创建目标对象。

我知道唯一的选择 - 创建一个包含必需类型作为其字段的高级合成类,并将其作为源转换为Spring Converter。但也许可以更容易地做到这一点?

提前致谢。

java spring converters
1个回答
1
投票

默认情况下,Spring似乎不提供暴露任何类型功能的接口,允许您接受多个源对象。

根据定义,Converter接口的签名只接受S,然后可以将其转换为T。如果Spring将来会提供一个可以接受多个输入对象(比如SU)的接口,然后用它来创建一个T,但是从Spring 5.x开始,这仍然不是真的很好。当下。

如果您真的想使用Converter接口的实现,您可以执行以下任何操作:

  • 如果你自己实例化,你可以通过构造函数传递一个或对象。这意味着实现类将开始有效地存储状态(这在我看来是取代简单转换器的工作)。
  • 创建一个转换器,它将接受一个进位对象作为它的来源。 此模式可以很容易地用于将两个对象转换为一个 只需使用Spring Pair对象(假设您使用Spring 数据)。有关Pair的文档可以找到here

假设您确实需要使用特定于Spring的转换器(如果您将它们全局注册到FormatterRegistry,则上述情况应该可以正常工作)。

现在,假设上面的情况并非如此,那么没有什么可以阻止你使用原生JDK并使用BiFunction的实现。事实上,你可以更进一步,使这个类成为Component意味着你可以随时注入它。这样做的权衡?你将失去注册全局转换器的能力,但是如果你的项目没有使用它们,那么权衡是最小的(这里注意Converter实现是线程安全的)。

最后,没有什么可以阻止你创建自己的@FunctionalInterface,你将用它来执行任意数量的输入源转换。

总而言之,没有Spring不提供开箱即用的方式。它本来不错,但它似乎不可用。

© www.soinside.com 2019 - 2024. All rights reserved.