当我读到"Spring in Action 5“一书,读到第9章”集成Spring“时,特别是在"Splitters”一节中,这本书显示,在将集合分离成每个被发送到另一个通道处理的项目时,您可以直接用Splitter方法返回集合。我一遍又一遍地阅读了它,但仍然无法得到它,为什么不先分离集合,然后将每一项返回到另一个通道?谁能帮助我更清楚地理解它吗?非常感谢。
这本书首先说:
但是,如果您想进一步分解它,而不是处理一个LineItems列表,而是分别处理每个LineItem呢?要将行项列表拆分为多个消息,只需编写一个使用@Splitter注释的方法(而不是bean),并返回LineItems.的集合。
书中的代码如下:
@Splitter(inputChannel="lineItemsChannel",outputChannel="lineItemChannel")
public List<LineItem> lineItemSplitter(List<LineItem> lineItems) {
return lineItems;
}这本书解释了这个代码:
当带有有效列表负载的消息到达名为lineItemsChannel的通道时,它将传递给lineItemSplitter()方法。根据拆分器的规则,必须返回要拆分的项的集合。在本例中,您已经有了一个LineItems集合,因此您只需直接返回集合。因此,集合中的每个LineItem都以自己的消息发布到名为lineItemChannel的通道。(来自9.2.5Splitters)
但是我认为"lineItemSplitter“拆分器方法应该将每一项逐一返回给outputChannel "lineItemChannel”进行处理(而且我无法想象如何在表达式中编写这段代码,希望您理解我的想法)。
发布于 2019-08-12 13:09:16
实际的分割(发送到输出通道)是由框架完成的。拆分器代码返回集合,框架以离散消息的形式发出每个拆分。
在以后的版本中(因为这本书已经写好了),您现在也可以返回一个Iterator或Iterable。例如,这在FileSplitter中很有用,因为它避免将整个文件加载到内存中。
https://stackoverflow.com/questions/57458050
复制相似问题