当前位置: 首页 > 知识库问答 >
问题:

Spring集成流中的对象方法参考

史烈
2023-03-14

在通道上接收消息,并由变压器处理。变压器的输出是以下类,它被传递到流程中的下一步:

public class DomainBean{

   public DomainBean process() {
      // code
      return this;
   }

}

另一个bean有一个Transformer方法,该方法在上面的bean上调用process方法,如下所示:

@Component
public class Handler {

    @Transformer
    public Object handle(Message<?> message) throws MessagingException {
        DomainBean domainBean = (DomainBean) message;
        domainBean.process();
        return domainBean ;
    }

}

在IntegrationFlow中,调用handle方法如下:

.transform(handler)

理想情况下,我希望去掉处理程序bean类,并调用域bean。process()使用对象方法引用,如下所示:

.transform(DomainBean::process)

当我试着那样做的时候,或者说。

Non-static method cannot be referenced from a static context

有什么办法能让这一切成功吗?

谢谢

共有1个答案

郑燕七
2023-03-14

你的问题不清楚。IntegrationFlow定义中确实有这个方法:

 * 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()val。此签名不符合转换器的目的。是的,您可以使用Handler中的lambda执行相同的操作,或者另一种解决方案是使用. hand()。这个确实可以调用val方法,老实说,这正是适合您的逻辑的-到目前为止还没有任何转换逻辑。

然而,当服务方法为void时,该方法在流中调用后没有任何连续性。这样一个<代码>。handle()必须是流定义中的最后一个单向endpoint。void等于出站通道适配器。

 类似资料:
  • 本文向大家介绍springboot集成rabbitMQ之对象传输的方法,包括了springboot集成rabbitMQ之对象传输的方法的使用技巧和注意事项,需要的朋友参考一下 rabbitMQ的安装方法网上有很多教程,这里就不重复了。 在springboot上使用rabbitMQ传输字符串和对象,本文所给出的例子是在两个不同的项目之间进行对象和和字符串的传输。 rabbitMQ的依赖(在两个项目中

  • 我有一些服务,一个是用Grails 2.4.2(Spring 4.0.5)实现的,一些是用Spring Web(Spring 4.0.5)实现的,还有一个是用Spring Boot 1.2.1(Spring 4.1.4)实现的。 这些服务通过RabbitMQ和Spring-Integration进行通信。 Grails和Spring Web服务之间的通信很好,但不可能与Spring Boot服务进

  • 我试图理解在Spring集成中聚合时返回的类型,这相当困难。我正在使用Project Reactor,我的代码片段是: 除了理解示例中传递的类型之外,我还想知道如何才能知道中流动的对象及其类型。

  • 本文向大家介绍Spring 应用中集成 Apache Shiro的方法,包括了Spring 应用中集成 Apache Shiro的方法的使用技巧和注意事项,需要的朋友参考一下 这一篇文章涵盖了将 Shiro 集成到基于 Spring 的应用程序的方法。 Shiro 的 Java Bean兼容性使它非常适合通过 Spring XML 或其他基于 Spring 的配置机制进行配置。Shiro 的应用程

  • 我已经建立了一个简单的Spring集成流程,该流程由以下步骤组成: 然后定期轮询一个rest api 对有效载荷做一些处理 并将其置于Kafka主题上。 请遵守以下代码: 这非常有效,然而,我正在努力想出一些好的测试。 我应该如何模拟外部RESTAPI

  • 本文向大家介绍spring boot 集成shiro的配置方法,包括了spring boot 集成shiro的配置方法的使用技巧和注意事项,需要的朋友参考一下 spring boot提供了一个自带的认证框架,同时也提供自定义的javaconfig配置扩展,spring-sercurity同样也是优秀的框架,但是习惯了用apache shiro框架,而且原项目就是集成的shiro框架,到网上找了一下