SpEL可以与spring xml配置中的import语句一起使用

时间:2014-05-14 09:33:07

标签: spring

我试图在spring xml配置中的import语句中使用SpEL。 我正在努力做到这一点

<import resource="classpath*:/'#{'${enable.mass.quote.service:false}'=='true' ? 'massquoting' : 'quoting'}'-beans.xml"/>

但它不起作用,请提出任何建议

2 个答案:

答案 0 :(得分:3)

其实你是对的:<import resource>不支持SpEL,但它支持property-placeholders

// Resolve system properties: e.g. "${user.dir}"
location = environment.resolveRequiredPlaceholders(location);

因此,对于您的情况,它可能看起来像:

<import resource="classpath*:/${enable.mass.quote.service:quoting}-beans.xml"/>

其中enable.mass.quote.service的值应为massquoting

如果您的病情较高,例如enable.mass.quote.service=true,您应该依赖Spring Profiles

<beans profile="service">
    <import resource="classpath*:/massquoting-beans.xml"/>
</beans>

<beans profile="nonService">
    <import resource="classpath*:/quoting-beans.xml"/>
</beans>

答案 1 :(得分:0)

我也遇到了这个要求,事实证明答案是否定的。 SpEL或占位符不能在Spring导入语句中使用,因为导入发生在占位符/表达式被评估和替换之前。请参阅here。 Spring配置文件的答案只是Spring配置文件从Spring 3.1.x开始浮动,因此当使用旧版本的Spring时,可能需要承担编写自定义namespaces and their handlers的繁重任务。