2017-09-28 6 views
1

J'ai vu dans de nombreux cas la méthode EIP .handle("someBean", "someMethod"), jouant un rôle important dans les flux d'intégration. Je peux comprendre que c'est juste un activateur de service dans l'ancienne configuration XML, mais j'ai besoin de quelques précisions sur la façon de créer ce bean et ce que le someMethod retourne. En outre, dans quels cas dois-je utiliser .handle(...)? Peut-être qu'un exemple complet utilisant Java DSL devrait fonctionner pour moi.Printemps Intégration Java DSL .handle (String nomBean, String methodName)

Répondre

1

Comme remarqué correctement le .handle("someBean", "someMethod") est entièrement égal à <int:service-activator ref="someBean" method="someMethod"/>: https://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#service-activator-namespace.

Cela signifie que vous devez avoir la définition someBean pour l'appel de service dans la zone someMethod. Par exemple, vous devez effectuer une logique simple pour convertir payload du message entrant dans le boîtier supérieur et retourner le résultat:

class MyService { 

    public String someMethod(String payload) { 
     return payload.toUpperCase(); 
    } 

} 

Le retour de cette méthode devient comme payload du message sortant à l'autre extrémité eip votre définition IntegrationFlow. Tout ce que vous voyez dans le Manuel de référence est entièrement vrai pour Java DSL.

En particulier toutes les règles pour le <service-activator> ou @ServiceActivator sont appliquées pour ce .handle().

+0

Merci Artem pour votre réponse rapide. Est-il nécessaire d'annoter 'someMethod' avec' @ Bean'? En outre, je peux effectuer la même logique avec la méthode EIP de transformation, donc pourriez-vous donner un autre exemple de l'utilisation '.handle (...)'? Dans quels cas dois-je utiliser strictement '.handle (...)'? –

+0

Non, nous n'avons besoin de '@ Bean' que pour les haricots, par ex. les méthodes du bean dans le fichier '@ Configuration'. Vous avez déjà votre 'someBean' en tant que bean. La méthode de service peut entièrement être sans annotations. Un autre exemple de '.handle()' en contradiction avec '.transform()' est comme l'utilisation directe du 'JdbcTemplate' de votre méthode. Droit, vous pouvez le faire avec un transformateur, mais il serait préférable de distinguer la logique entre les composants appropriés. Si cela ne concerne pas la transformation, le '.handle()' est pour vous! De plus, gardez à l'esprit que '.handle()' ne nécessite pas de réponse, mais '.transform()' le fait. –