我正在尝试使用factory-method
初始化service-activator
,如下所示
<int:service-activator>
<bean class="com.sample.FileWriterFactory" factory-method="createFileWriter">
<constructor-arg index="0" value="${xml.out-directory}/xml"/>
<constructor-arg index="1" value="#{ headers['file_name'] + '.xml' }"/>
</bean>
</int:service-activator>
但是,SpEL评估失败,因为在评估上下文中找不到headers
属性。确切的错误摘录是
org.springframework.expression.spel.SpelEvaluationException:EL1008E:在'org.springframework.beans.factory.config.BeanExpressionContext'类型的对象上找不到属性或字段'headers' - 可能不公开?
这样做的目的是我希望通过根据需要传递不同的参数来重用相同的POJO。 我做错了什么?
答案 0 :(得分:0)
#{...}
表达式被评估一次。
访问属性(例如headers
)的表达式需要在运行时进行评估(针对作为根对象的消息)。
如果您正在尝试这样做,请使用value="headers['file_name'] + '.xml'"
然后在您的构造函数中...
private final Expression expression;
public FileWriterFactory(String directory, String expression) {
...
this.expression = new SpelExpressionParser().parseExpression(expression);
}
然后,在您的运行时服务方法
中String fileName = this.expression.getValue(message, String.class);