Spring Integration DSL:如何通过Bean名称引用transformer而非构造注入?
无需构造函数注入即可在IntegrationFlow中引用转换器Bean的方法
当然有几种简便方法可以解决这个问题,不用再写一堆构造函数注入:
- 直接传入转换器Bean的名称
Spring Integration的transform()方法提供了重载版本,支持直接传入Bean的名称字符串,框架会自动从Spring容器中查找并注入对应的转换器Bean。这样你完全不需要手动注入,代码会清爽很多。
修改后的代码示例:
@Component public class AutowiredTransformerFlows { @Bean(name = "autowiredTransformerFlow") IntegrationFlow usesBeanAsTransformer() { return IntegrationFlows.from("autowiredTransformChannel") .filter("(payload % 2) == 1", discardReturnsCurrentMessage()) // 直接传入转换器Bean的名称(默认类名首字母小写,可通过@Component自定义名称) .transform("doubleIntegerValueTransformer") .get(); } }
- 使用SpEL表达式引用Bean
如果需要更灵活的调用(比如调用转换器的特定方法),可以通过SpEL表达式@beanName来引用容器中的Bean,示例如下:
.transform("@doubleIntegerValueTransformer.transform(payload)")
不过这种方式比直接传Bean名称繁琐一些,适合有特殊调用需求的场景。
注意:不建议通过
ApplicationContext手动获取Bean(比如context.getBean(...)),这种方式会让代码耦合Spring上下文,违背依赖注入的设计原则。
内容的提问来源于stack exchange,提问作者al.truisme
相关产品推荐
相关产品推荐

