您要查找的代码在 中FtpInboundChannelAdapterSpec
,如下所示:
@Override
public FtpInboundChannelAdapterSpec regexFilter(String regex) {
return filter(composeFilters(new FtpRegexPatternFileListFilter(regex)));
}
@SuppressWarnings("unchecked")
private CompositeFileListFilter<FTPFile> composeFilters(FileListFilter<FTPFile> fileListFilter) {
CompositeFileListFilter<FTPFile> compositeFileListFilter = new CompositeFileListFilter<>();
compositeFileListFilter.addFilters(fileListFilter,
new FtpPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "ftpMessageSource"));
return compositeFileListFilter;
}
因此,正如您在声明 时所看到regexFilter
的,它与 the 一起组成FtpPersistentAcceptOnceFileListFilter
,CompositeFileListFilter
其中regexFilter
肯定是第一个。首先是因为FtpPersistentAcceptOnceFileListFilter
持久性,存储可能与正则表达式不匹配的文件并不好。
如果你需要一些更复杂的逻辑,你真的应该只CompositeFileListFilter
通过filter()
选项注入它。我的意思是你必须将你的组合regexpFilter
成CompositeFileListFilter
而不是regexFilter()
。
注意:将 Java DSL 移入 Core in 后5.0
,.filter()
选项如下所示:
public S filter(FileListFilter<F> filter) {
this.synchronizer.setFilter(filter);
return _this();
}
它覆盖任何以前提供的过滤器,包括regexp
. .filter()
这样做是为了避免与支持CompositeFileListFilter
或ChainFileListFilter
外部配置的链混淆。