2016-02-25 6 views
2

Я переношу проект из конфигурации интеграции Spring Spring в Java DSL. Я заранее подготовил некоторые интеграционные тесты. Поэтому я могу сделать переход безопасно шаг за шагом.@EnableIntegration annotation Цель

В какой-то момент после перемещения этого определения соединителя XML

<int:publish-subscribe-channel id="upstreamAckChannel" /> 

на Java Spring Конфигурация

@Bean 
public PublishSubscribeChannel upstreamAckChannel() { 
    return MessageChannels.publishSubscribe().get(); 
} 

мой поток интеграции остановился тестовых сообщений для повторной отправки в моих тестах.

Через некоторое время и экспериментов я понял, что моя конфигурация Spring Java обязательно имеют @EnableIntegration аннотацию вместе с обычным Spring @Configuration аннотаций для правильной работы.

Вопрос в том, что такое @EnableIntegration аннотация семантика? Когда я не могу использовать его и когда я должен использовать?

Я нашел только этот небольшой Configuration параграф в официальном справочнике. К сожалению, описание не ясно.

ответ

3

Класс PublishSubscribeChannel существует внутри Spring Integration project. Аннотирование @EnableIntegration используется для установки конфигурации по умолчанию для Spring Integration, поэтому, как правило, при использовании Spring Integration вы хотите добавить ее (если вы не используете часть интеграции Spring, которая не требует контекста - вряд ли). Единственный раз, когда вы, возможно, захотите отказаться от него, - это если вы хотите сделать свою собственную конфигурацию с нуля.

+0

Благодарим за ответ! Как я могу узнать, какие компоненты интеграции Spring включены (или подключены) с помощью этой аннотации? Я нашел интересную информацию в [IntegrationRegistrar.java] (https://github.com/spring-projects/spring-integration/blob/68c0df5286e9fd762faba628a6efc9252a8a7df2/spring-integration-core/src/main/java/org/springframework/integration/ config/IntegrationRegistrar.java) в методе 'registerBeanDefinitions', но я не смог найти точное место, где' @ EnableIntegration' действительно обрабатывается. –

+0

Я нашел это хорошим ответом. Хотя я согласен с тем, что мы должны улучшить документацию. Наше предположение состояло в том, что люди уже знакомы с чем-то вроде '@ EnableMvc',' @ EnableAsync', '@ EnableRetry',' @ EnableJpaRepositories' и других '@Enable ...'. Этот для Spring Integration работает одинаково: он инициирует 'IntegrationRegistrar' регистрировать в ApplicationContext некоторую' BeanFactoryPostProcessor' и другую инфраструктуру. Это сработало для вас раньше, потому что у вас был XML, который через свой «NamespaceHandler» выполняет ту же инфраструктуру через «IntegrationRegistrar». –

+0

@ArtemBilan спасибо! Теперь понятно. –