我试图将变量传递给Spring bean,如下所示:
<component doc:name="Java">
<no-arguments-entry-point-resolver />
<prototype-object class="org.test.MyComponent">
<property key="fileName" value="#[sessionVars.filename]" />
</prototype-object>
</component>
但表达从未解决过?还有另一种方法吗?
答案 0 :(得分:4)
这与弹簧配置和Mule表达语言(MEL)混淆。
第1点:
即使组件是在Mule Config文件中定义的。元素(标签)<property/>
来自Springs Bean模式定义。因此,MEL不解释key
和value
的属性值。
第2点:由于它是在加载(实例化)期间调用的setter注入提供的,因此会话变量(运行时间值)的值将不可用。
一种可能的解决方案是使组件实现Mule的Callable接口。这样您就可以访问包含会话变量的MuleMessage。
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
MuleMessage muleMessage = eventContext.getMessage();
muleMessage.getProperty("propertyName", PropertyScope.SESSION);
希望这有帮助。
答案 1 :(得分:1)
当Mule服务器启动时,将加载每个元素,并创建component
和spring-object
。我不认为你可以将会话变量或者context-properties
以外的任何变量传递给服务器启动时发生的对象创建。