|
对于最新稳定版本,请使用 Spring Integration 7.0.0! |
消息元注释
从4.0版本开始,所有消息注释都可以配置为元注释,所有用户自定义消息注释都可以定义相同的属性来覆盖其默认值。此外,元注释还可以层次配置,如下示例所示:
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ServiceActivator(inputChannel = "annInput", outputChannel = "annOutput")
public @interface MyServiceActivator {
String[] adviceChain = { "annAdvice" };
}
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@MyServiceActivator
public @interface MyServiceActivator1 {
String inputChannel();
String outputChannel();
}
...
@MyServiceActivator1(inputChannel = "inputChannel", outputChannel = "outputChannel")
public Object service(Object payload) {
...
}
层级配置元注释允许用户设置各种属性的默认值,并实现框架 Java 依赖与用户注释的隔离,避免在用户类中使用。如果框架找到带有用户注释且带有框架元注释的方法,则视为该方法直接用框架注释进行注释。
注释@Bean方法
从4.0版本开始,你可以在@Bean方法定义@Configuration类,用于基于豆子而非方法生成消息端点。它在@Bean定义是“跳出框架”的消息处理器实例(聚合消息处理器,默认消息分裂器,以及其他),转换器实例(JsonToObjectTransformer,ClaimCheckOutTransformer,以及其他),消息源实例(文件阅读消息源,RedisStoreMessageSource, 以及其他)。以下示例展示了如何使用消息注释@Bean附注:
@Configuration
@EnableIntegration
public class MyFlowConfiguration {
@Bean
@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000"))
public MessageSource<String> consoleSource() {
return CharacterStreamReadingMessageSource.stdin();
}
@Bean
@Transformer(inputChannel = "inputChannel", outputChannel = "httpChannel")
public ObjectToMapTransformer toMapTransformer() {
return new ObjectToMapTransformer();
}
@Bean
@ServiceActivator(inputChannel = "httpChannel")
public HttpRequestExecutingMessageHandler httpHandler() {
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler("https://foo/service");
handler.setExpectedResponseType(String.class);
handler.setOutputChannelName("outputChannel");
return handler;
}
@Bean
@ServiceActivator(inputChannel = "outputChannel")
public LoggingHandler loggingHandler() {
return new LoggingHandler("info");
}
}
5.0 版本引入了对@Bean注释为@InboundChannelAdapter回归java.util.function.Supplier,可以产生POJO或消息. 以下示例展示了如何使用该组合:
@Configuration
@EnableIntegration
public class MyFlowConfiguration {
@Bean
@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000"))
public Supplier<String> pojoSupplier() {
return () -> "foo";
}
@Bean
@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000"))
public Supplier<Message<String>> messageSupplier() {
return () -> new GenericMessage<>("foo");
}
}
元注释规则在@Bean方法也包括(该@MyServiceActivator前面描述的注释可以应用于@Bean定义)。
当你在消费者身上使用这些注释时@Bean如果豆子定义返回了适当的消息处理器(根据注释类型),你必须设置属性(例如输出通道,需要回复,次序以及其他方面)。消息处理器 @Bean定义本身。仅使用以下注释属性:建议链,自动启动,输入通道,阶段和轮询者. 其他属性都是给作者用的。 |
| Beans名称通过以下算法生成: |
-
这
消息处理器(消息源)@Bean其标准名称来自方法名称或名称属性@Bean. 这就像没有消息注释一样@Bean方法。 -
这
摘要终点豆名的生成模式如下:[@Bean名]。[去大写的AnnotationClassShortName]. 例如,SourcePollingChannelAdapter端点控制台来源()前面所示的定义 得到豆子名consoleSource.inboundChannelAdapter. 与 POJO 方法不同,豆子方法名称不包含在端点豆名中。另见端点豆名称。 -
如果
@Bean不能直接在目标端点中使用(非消息源,摘要回复制作消息处理器或摘要消息路由器),分别摘要标准消息处理器工厂豆注册以委托此事@Bean. 这种包裹物的豆子名称由以下模式生成:[@Bean名]。[去大写AnnotationClassShortName]。[handler(或源)].
在使用这些注释时@Bean定义,输入通道必须引用已声明的 bean。如果应用上下文中尚未出现,通道会自动声明。 |
|
在 Java 配置中,你可以使用任何一个配置
结合现有的 Spring 容器逻辑,消息端点 bean(基于 |
创建带有注释的桥梁
从4.0版本开始,Java配置提供了@BridgeFrom和@BridgeTo @Bean方法注释以标记消息频道豆子@Configuration类。 这些功能实际上是为了完整性,提供了一种方便的机制来声明桥接处理者以及其消息端点配置:
@Bean
public PollableChannel bridgeFromInput() {
return new QueueChannel();
}
@Bean
@BridgeFrom(value = "bridgeFromInput", poller = @Poller(fixedDelay = "1000"))
public MessageChannel bridgeFromOutput() {
return new DirectChannel();
}
@Bean
public QueueChannel bridgeToOutput() {
return new QueueChannel();
}
@Bean
@BridgeTo("bridgeToOutput")
public MessageChannel bridgeToInput() {
return new DirectChannel();
}
你也可以把这些注释当作元注释使用。
注释端点的建议
参见使用注释的建议端点。