在通道上接收消息,并由变换器处理。变换器的输出是以下类,它将传递给流程中的下一步:
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ] ]
另一个bean有一个public class DomainBean{
public DomainBean process() {
// code
return this;
}
}
方法,它调用上面bean上的@Transformer
方法,如下所示:
process
在IntegrationFlow中,调用@Component
public class Handler {
@Transformer
public Object handle(Message<?> message) throws MessagingException {
DomainBean domainBean = (DomainBean) message;
domainBean.process();
return domainBean ;
}
}
方法如下:
handle
理想情况下,我想取消.transform(handler)
bean类,并使用对象方法引用调用Handler
,如下所示:
domainBean.process()
当我尝试时,或.transform(DomainBean::process)
编译器抱怨
.<DomainBean, DomainBean>transform(DomainBean::process)
有没有让这项工作?
由于
答案 0 :(得分:0)
你的问题不明确。 IntegrationFlowDefinition
:
* Populate the {@link MessageTransformingHandler} instance for the provided {@link GenericTransformer}.
* @param genericTransformer the {@link GenericTransformer} to populate.
* @param <S> the source type - 'transform from'.
* @param <T> the target type - 'transform to'.
* @return the current {@link IntegrationFlowDefinition}.
* @see MethodInvokingTransformer
* @see LambdaMessageProcessor
*/
public <S, T> B transform(GenericTransformer<S, T> genericTransformer) {
GenericTransformer
实际上可以表示为lambda或方法引用,我们有足够的测试来确认。那里的代码看起来像:
.transform("hello "::concat)
...
.<String, Integer>transform(Integer::parseInt)
...
.<String, String>transform(String::toUpperCase)
...
.<MessagingException, Message<?>>transform(MessagingException::getFailedMessage)
也许您需要的问题是在方法中添加精确的泛型agrs?因此:
.<DomainBean, DomainBean>transform(DomainBean::process)
然而,我发现您的DomainBean.process()
是void
。此签名不符合transformer
目的。是的,您可以使用Handler
中的lambda或其他解决方案使用.handle()
执行相同的操作。这个实际上可以调用void
方法,说实话,这恰恰适合你的逻辑 - 到目前为止还没有任何转换逻辑。
但是当服务方法为void
时,在流中调用此方法后没有任何延续。这样的.handle()
必须是流定义中的最后一个单向端点。 void
等于Outbound Channel Adapter。