Использование Spring Framework стимулирует разработчиков к использованию интерфейсов в коде и внедрения зависимостей(DI), обеспечивая POJO-объекты необходимыми для выполнения поставленной задачи зависимостями. Spring Integration развивает эту концепцию на шаг дальше, где POJO-объекты связаны друг с другом с помощью парадигмы обмена сообщениями и отдельные компоненты могут быть не знать о существовании других компонентов в приложении. Такое приложение построено путем соединения мелких повторно используемых компонентов, чтобы сформировать высокий уровень функциональности. При тщательном проектировании, эти потоки могут быть модульными, а также повторно использованы на на более высоком уровене.
В дополнение к соединению вместе мелких компонентов, Spring Integration предоставляет широкий выбор адаптеров каналов и шлюзов для связи с внешними системами. Адаптеры каналов используются для односторонней интеграции (отправлять или получать); шлюзы используются для запроса/ответа сценариев (входящих и исходящих). Для получения полного списка адаптеров и шлюзов, обратитесь к справочной документации.
Spring XD основано на Spring Integration, где Spring Integration модули собраны в XD Stream.
Рекомендованный путь для начального использования spring-integration
в вашем проекте
с использованием системы управления зависимостями – скопировать фрагмент кода ниже и вставить
в вашу конфигурацию сборки. Нужна помощь? Ознакомьтесь с нашими руководствами по созданию приложений
с использованием Maven и
Gradle.
<dependencies>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
</dependencies>
В приложении на примере ниже вы можете увидеть, интерфейс шлюза используется для выполнения двух совершенно совершенно разных его реализаций. Чтобы собрать и запустить это приложение, вам понадобятся spring-integration-ws и spring-integration-xml модули, описанные выше.
public class Main {
public static void main(String... args) throws Exception {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("context.xml");
// Simple Service
TempConverter converter =
ctx.getBean("simpleGateway", TempConverter.class);
System.out.println(converter.fahrenheitToCelcius(68.0f));
// Web Service
converter = ctx.getBean("wsGateway", TempConverter.class);
System.out.println(converter.fahrenheitToCelcius(68.0f));
}
}
public interface TempConverter {
float fahrenheitToCelcius(float fahren);
}
<!-- Simple Service -->
<int:gateway id="simpleGateway"
service-interface="foo.TempConverter"
default-request-channel="simpleExpression" />
<int:service-activator id="expressionConverter"
input-channel="simpleExpression"
expression="(payload - 32) / 9 * 5"/>
<!-- Web Service -->
<int:gateway id="wsGateway" service-interface="foo.TempConverter"
default-request-channel="viaWebService" />
<int:chain id="wsChain" input-channel="viaWebService">
<int:transformer
expression="'<FahrenheitToCelsius xmlns=''http://tempuri.org/''><Fahrenheit>XXX</Fahrenheit></FahrenheitToCelsius>'.replace('XXX', payload.toString())" />
<int-ws:header-enricher>
<int-ws:soap-action value="http://tempuri.org/FahrenheitToCelsius"/>
</int-ws:header-enricher>
<int-ws:outbound-gateway
uri="http://www.w3schools.com/webservices/tempconvert.asmx"/>
<int-xml:xpath-transformer
xpath-expression="/*[local-name()='FahrenheitToCelsiusResponse']/*[local-name()='FahrenheitToCelsiusResult']"/>
</int:chain>