我在看几个月前写的一些代码时,偶然发现了一些正在做以下工作的服务类:
- 查询数据库并获取实体列表(为了方便起见,我们将它们视为
Person
实体( - 流式传输查询的列表,并将检索到的数据转换为
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能够自动为您转换值。