创建使用
IntegrationFlow
或 from()
或 channel()
的 gateway()
时,我可以通过简单地提供频道的 String
名称来引用频道。但是,对于使用作为 bean 的转换器的 transform()
操作,我必须在构造函数中包含那些 Autowired
bean。当流程中有大量转换时,这可能会很挑剔。
是否有一种简单的方法来引用
Bean
使用的 transform()
而无需在构造函数中自动装配 bean?
@Component
public class DoubleIntegerValueTransformer implements GenericTransformer<Integer, Integer> {
@Override
public Integer transform(Integer source) {
return source * 2;
}
}
@Component
public class AutowiredTransformerFlows {
// Would like to eliminate the constructor and local instance variable
private final DoubleIntegerValueTransformer doubleIntegerValueTransformer;
public AutowiredTransformerFlows(DoubleIntegerValueTransformer doubleIntegerValueTransformer) {
this.doubleIntegerValueTransformer = doubleIntegerValueTransformer;
}
@Bean(name = "autowiredTransformerFlow")
IntegrationFlow usesBeanAsTransformer() {
return IntegrationFlows.from("autowiredTransformChannel")
.filter("(payload % 2) == 1", discardReturnsCurrentMessage())
.transform(doubleIntegerValueTransformer)
.get();
}
}