2016-02-29 34 views
2

我正在实现一个自定义Spring XD模块(处理器)。 我已经将模块选项添加到它,它们可以通过@Value("${varName}")语法在ModuleConfiguration中轻松引用。如何在Spring Integration DSL的SpEL表达式中使用Spring XD Module选项?

return IntegrationFlows 
      .from(input) 
      .enrichHeaders(h -> h 
        .headerExpression("varHeader", "varName") //That's the line with an issue 
      ) 
      .transform(customTransformer) 
      .channel(output) 
      .get(); 

有直接在流生成器使用的一种方式,而不是注入的配置Bean:

但是,我不能直接在流生成器的规划环境地政司表达式中使用它们?

回答

2

这不是Spring XD的问题,既不是Spring Integration Java DSL,也不是Java注释配置。

Java Config和XML配置(在这种情况下)之间的区别是,XML bean定义的属性经历了添加转换阶段 - BeanDefinition属性合并。这对目标对象的创建很有帮助。

通过该属性,您可以定义expression属性,并在创建目标对象之前提取属性占位符值。

对,使用Java Config,我们也有BeanDefinition,但使用Java Config,对象实例完全掌握在您的手中。因此,任何set...()都不在Container范围内,因此无法确定您的值是否与Property Placeholder一起使用。

Java的&诠释配置建议使用@Value("${varName}"),并直接在您的@Bean方法使用的值。来自对岸,你甚至可以在注释移动到方法的定义:

@Bean 
public IntegrationFlow myFlow(@Value("${varName}") String myValue) { 
..... 
} 

还有一个绝招,这将不会是因为它是一个有点冗长,那么优雅:

.headerExpression("varHeader", "@environment.getProperty('varName')") 

Environment解决Property Placeholders作为bean公开,任何Spring Integration Expressions都可以访问bean factory。 这个表达式仅针对每条消息进行评估的瓶颈,而不是像@Value("${varName}")那样。

+0

Artem,感谢您的澄清!我明白'headerExpression'会针对每条消息进行评估,但这对我来说很好,因为这个特定的流将以'trigger |'开头。 –

相关问题