Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现Spring'的最佳方法;当您需要将多个类型作为源传递时,可以使用s转换器接口_Java_Spring_Converters - Fatal编程技术网

Java 实现Spring'的最佳方法;当您需要将多个类型作为源传递时,可以使用s转换器接口

Java 实现Spring'的最佳方法;当您需要将多个类型作为源传递时,可以使用s转换器接口,java,spring,converters,Java,Spring,Converters,通常需要从一堆源对象生成目标对象 我知道唯一的选择——创建一个高级合成类,其中包含必需的类型作为字段,并将其作为源代码传递给Spring转换器。但也许可以做得更容易些 提前感谢。默认情况下,Spring似乎没有提供一个接口来公开任何类型的功能,允许您接受多个源对象 根据定义,Converter接口的签名只接受一个S,然后可以转换为T。如果Spring将来能提供一个接口,可以接受多个输入对象(比如,S,U),然后用它来创建一个T,那就太好了,但从Spring 5.x开始,它仍然不存在 如果您确实想

通常需要从一堆源对象生成目标对象

我知道唯一的选择——创建一个高级合成类,其中包含必需的类型作为字段,并将其作为源代码传递给Spring转换器。但也许可以做得更容易些


提前感谢。

默认情况下,Spring似乎没有提供一个接口来公开任何类型的功能,允许您接受多个源对象

根据定义,
Converter
接口的签名只接受一个
S
,然后可以转换为
T
。如果Spring将来能提供一个接口,可以接受多个输入对象(比如,
S
U
),然后用它来创建一个
T
,那就太好了,但从Spring 5.x开始,它仍然不存在

如果您确实想使用
转换器
接口的实现,可以执行以下任一操作:

  • 如果您正在实例化自己,您很可能会传入一个或多个 对象通过构造函数。这意味着 实现类将开始有效地存储状态(即 在我看来,有些东西取代了简单转换器的工作)

  • 创建将接受进位对象作为其源的转换器。
    此模式可轻松用于将两个对象转换为一个对象
    只需使用Spring
    Pair
    object(假设您使用Spring
    数据)。可以找到与
    对相关的文档

假设您确实需要使用特定于Spring的转换器(如果您将它们全局注册到
FormatterRegistry
,则上述两种方法都可以正常工作

现在,假设上述情况不是真的,没有什么能阻止您使用本机JDK并使用
BiFunction
的实现。事实上,您可以更进一步,使该类成为一个
组件
,这意味着您可以随时注入它。这样做的权衡是什么?您将失去能力y来注册全局转换器,但是如果您的项目没有使用它们,那么权衡是最小的(这里需要注意的是,
Converter
实现是线程安全的)

最后,没有任何东西可以阻止您创建自己的
@functioninterface
,在给定任何数量的输入源的情况下,您将使用它来执行转换


总而言之,没有一个Spring不提供现成的方法来实现这一点。这本来很好,但它似乎不可用。

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

根据定义,
Converter
接口的签名只接受一个
S
,然后可以转换成
T
。如果Spring将来提供一个可以接受多个输入对象(例如,
S
U
)的接口,那就太好了这将用于创建
T
,但从Spring 5.x开始,这仍然不存在

如果您确实想使用
转换器
接口的实现,可以执行以下任一操作:

  • 如果您正在实例化自己,您很可能会传入一个或多个 对象。这意味着 实现类将开始有效地存储状态(即 在我看来,有些东西取代了简单转换器的工作)

  • 创建将接受进位对象作为其源的转换器。
    此模式可轻松用于将两个对象转换为一个对象
    只需使用Spring
    Pair
    object(假设您使用Spring
    可以找到与
    对相关的文档

假设您确实需要使用特定于Spring的转换器(如果您将它们全局注册到
FormatterRegistry
,则上述两种方法都可以正常工作

现在,假设上述情况不是真的,没有什么能阻止您使用本机JDK并使用
BiFunction
的实现。事实上,您可以更进一步,使该类成为一个
组件
,这意味着您可以随时注入它。这样做的权衡是什么?您将失去能力y来注册全局转换器,但是如果您的项目没有使用它们,那么权衡是最小的(这里需要注意的是,
Converter
实现是线程安全的)

最后,没有任何东西可以阻止您创建自己的
@functioninterface
,在给定任何数量的输入源的情况下,您将使用它来执行转换


总而言之,任何Spring都不提供现成的方法来实现这一点。它本来很好,但似乎不可用。

因此,例如,您需要一个接受U、s并返回T的双转换器?@Aris_Kortex Yes您需要转换器成为Spring特定转换器的具体原因是什么?您是否在格式化程序中使用它例如Registry?@Aris_Kortex否,但在我的项目中,我普遍使用Spring converter,我想知道它是否适合这种情况。Meh,前几天我也在想同样的事情。我将发布一个真正快速的答案。因此,举个例子,你需要一个双转换器,假设它接受U,s并返回T?@Aris_Kortex是的,有什么特别的吗c为什么您需要转换器成为Spring特定的转换器?例如,您是否在FormatterRegistry中使用它?@Aris_Kortex否,但在我的项目中,我无处不在地使用Spring转换器,我想知道它是否适合这种情况。Meh,前几天我也在想同样的事情。我将发布一个真正快速的答案。这篇文章保存了下来我的天,