Bean定义中使用的Spring表达式语言(SpEL)中的条件

时间:2010-11-22 14:45:02

标签: spring conditional expression

到目前为止,SpEL在Spring 3.0中使用,

我想问一下,是否可以执行以下操作(在bean定义.xml中):

<c:choose>

  <c:when test="#{prop=='a'}">
   <bean class="BeanA"/>
  </c:when>

  <c:otherwise>
   <bean class="BeanB"/>
  </c:otherwise>

</c:choose>

Someth。就像在jstl。

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

环境配置文件/环境特定bean将在Spring 3.1中提供,应该很快就会发布 - 所以你可能要等待它。

Spring 3.0中没有对条件bean的内置支持。但是,可以通过使用PropertyPlaceholderConfigurers和/或FactoryBeans来实现。

答案 1 :(得分:2)

XML Spring bean定义文件没有条件机制。 但是,也许这会奏效:

<bean class="#{prop=='a' ? BeanA : BeanB}"/>

但即使这种方法有效,也不会是最具可读性的方法。我的建议是使用不同的XML配置文件集,并根据一些全局设置选择它们。当然,你会把所有常见的bean(即那些定义总是相同的bean)放在一个单独的文件中,并且总是包含它。

答案 2 :(得分:0)

这不是使用spel的问题,而是更多的XML,afaik你不能用XML做这个(但是xslt)

此方案的正确弹簧方式可能是http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-class与BeanA和BeanB的“父”接口结合使用

您可以将参数(系统?运行时特定的?)传递给工厂,这将创建BeanA或BeanB