Spring-Integration DSL transform() 方法使用 bean 的名称作为转换器

问题描述 投票:0回答:0

创建使用

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();
    }
}
spring spring-integration dsl
© www.soinside.com 2019 - 2024. All rights reserved.