Java函数与Spring转换器的数据转换



我在看几个月前写的一些代码时,偶然发现了一些正在做以下工作的服务类:

  1. 查询数据库并获取实体列表(为了方便起见,我们将它们视为Person实体(
  2. 流式传输查询的列表,并将检索到的数据转换为PersonDto传输对象的列表

现在,对于步骤#2,使用自定义Spring转换器来执行从类型a(Person(到类型B(PersonDto(的转换。

现在我的问题如下。使用类似的java.util.函数代替Spring转换器可以执行相同的精确操作。那么,用这种方法代替这种方法有什么好处呢?

我查看了文档,除了提到任何Spring转换器实现都是线程安全的之外,我没有看到任何其他明显的差异。

我倾向于经常使用Spring转换器,因为我可以在不同的地方注入它们并重用它们,但我认为对于包含自执行lambda函数的服务类也可以这样做。

如上所述,与普通函数相比,使用Spring转换器可能有哪些优点/缺点。

根据您的用例,可能没有。转换器部分是在Spring 3中实现的,支持Java 5(和6(,因此不存在Function

但重要的是,转换器功能是Spring的一部分。虽然你可以很容易地调用你的函数,但Spring对此一无所知。不过,Spring确实了解自己的转换器,所以你可以编写转换器,让整个Spring框架了解如何将A转换为B,其中A是Spring不了解的,B是它了解的。这在某些特殊情况下可能是必需的,即使最常见的用例已经为您编写了。

因此,Spring的Converter功能主要不是转换数据,而是扩展Spring框架本身的功能。使用它自己手动转换数据与其说是一个真实的用例,不如说是一种副作用。

当您将Converter<S,T>注册到Spring容器时,Spring能够自动为您转换值。

最新更新