@EnableIntegration 注解目的

And*_*sun 6 java spring spring-integration

我将项目从 XML Spring Integration 配置迁移到 Java DSL。我事先准备了一些集成测试。所以我可以安全地逐步进行迁移。

在移动此 XML 连接器定义后的某个时刻

<int:publish-subscribe-channel id="upstreamAckChannel" />
Run Code Online (Sandbox Code Playgroud)

到 Java Spring 配置

@Bean
public PublishSubscribeChannel upstreamAckChannel() {
    return MessageChannels.publishSubscribe().get();
}
Run Code Online (Sandbox Code Playgroud)

我的集成流程停止向我的测试重新发送测试消息。

经过一段时间和实验,我意识到我的 Spring Java 配置必须@EnableIntegration注释和通常的 Spring@Configuration注释才能正常工作。

问题是什么是@EnableIntegration注解语义?什么时候不能用,什么时候必须用?

我只能在官方参考手册中找到这个小的配置段落。不幸的是,描述不清楚。

小智 6

PublishSubscribeChannel 类存在于Spring Integration 项目中。该@EnableIntegration注释用于采用了Spring集成默认配置,因此通常使用Spring集成当你需要添加它(除非您使用的是一块Spring集成的,不需要上下文-不太可能) . 您可能想要放弃的唯一一次是如果您想从头开始进行自己的配置。

  • 我发现这是一个很好的答案。虽然我同意我们应该改进文档。我们的假设是人们已经熟悉诸如 `@EnableMvc`、`@EnableAsync`、`@EnableRetry`、`@EnableJpaRepositories` 和其他 `@Enable...` 之类的东西。这个 Spring Integration 的工作方式相同:它启动 `IntegrationRegistrar` 以向 ApplicationContext 注册一些 `BeanFactoryPostProcessor` 和其他基础设施。这之前对你有用,因为你有一些 XML,它通过它的`NamespaceHandler` 通过`IntegrationRegistrar` 执行相同的基础结构。 (3认同)