代码之家  ›  专栏  ›  技术社区  ›  sergionni

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

  •  4
  • sergionni  · 技术社区  · 13 年前

    至于在Spring3.0中使用的SpEL,

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

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

    有些事。就像在jstl。

    谢谢你的帮助。

    3 回复  |  直到 13 年前
        1
  •  5
  •   Flemming    13 年前

    环境概要文件/特定于环境的bean将在Spring3.1中提供,该版本将很快发布,因此您可能需要等待。

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

        2
  •  2
  •   Grzegorz Oledzki    13 年前

    对于XML Spring bean定义文件没有条件机制。 不过,也许这会奏效:

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

    但即使这种方法有效,它也不是最可读的方法。我的建议是使用不同的XML配置文件集,并根据一些全局设置来选择它们。自然地,您会将所有的公共bean(即定义总是相同的bean)放在一个单独的文件中,并始终包含它。

        3
  •  0
  •   Michael Pralow    13 年前

    这不是一个使用spel的问题,而是更多的XML,因为在XML中不能这样做(但是xslt)

    对于这种情况,正确的春季方式可能是 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-class 结合BeanA和BeanB的“父”接口

    你可以传递参数(系统?运行时特定?)去工厂,这会创造出BeanA或BeanB