用于数据转换的 Java Functions 与 Spring Converter

标签 java spring lambda

我在查看几个月前编写的一些代码时偶然发现了一些正在执行以下操作的服务类:

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

现在,对于第 2 步,自定义 Spring 转换器用于执行从类型 A (Person) 到类型 B (PersonDto) 的转换。

现在我的问题如下。可以使用类似的 java.util. 函数而不是 Spring 转换器来执行完全相同的操作。那么用那个代替方法有什么好处呢?

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

我倾向于大量使用 Spring 转换器,因为我能够在不同的地方注入(inject)它们并重新使用它们,但我想同样可以通过包含自执行 lambda 函数的服务类来完成。

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

最佳答案

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

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

因此 Spring 的 Converter 功能主要不是关于转换数据,而是关于扩展 Spring 框架本身的功能。与实际用例相比,使用它自己手动转换数据更多的是副作用。

关于用于数据转换的 Java Functions 与 Spring Converter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51632818/

相关文章:

java - 从 ListView 中选择项目并点击删除它 - Android 待办事项列表应用程序

java - 以特殊方式将 float 转换为整数

java - 用Spring实现单例模式的好方法

c# - PowerShell 中的 Linq.First 等价物是什么?

haskell - lambda 表达式中分号的含义

java - ArrayList 显示为红色且无法编译 --- java android

java - jlinked JRE 中的 "Received fatal alert: handshake_failure"

java - hibernate4.LocalSessionFactoryBean 无法转换为 org.hibernate.cfg.Configuration

spring - org.hibernate.hql.internal.ast.QuerySyntaxException : EdbmsEmployee is not mapped [from EdbmsEmployee edbmsEmployee where edbmsEmployee. 员工 ID=?]

c# - 通过 lambda 表达式传递属性名称以读取属性值