Условия в языке выражений Spring (SpEL), используемые в определении компонента - PullRequest
4 голосов
/ 22 ноября 2010

Насколько SpEL используется в Spring 3.0,

Я хотел бы спросить, возможно ли сделать следующее (в определении бина .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 ]

5 голосов
/ 02 декабря 2010

Профили среды / bean-компоненты, специфичные для среды, будут доступны в Spring 3.1, который должен быть выпущен в ближайшее время - так что вы можете подождать этого.

В Spring 3.0 отсутствует встроенная поддержка условных компонентов. Однако этого можно достичь с помощью PropertyPlaceholderConfigurers и / или FactoryBeans.

2 голосов
/ 22 ноября 2010

Нет условного механизма для файлов определений bean-компонентов XML.Однако, возможно, это сработает:

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

Но даже если этот подход сработает, он не будет наиболее читабельным.Мое предложение будет использовать другой набор файлов конфигурации XML и выбирать их в зависимости от некоторых глобальных настроек.Естественно, вы должны поместить все общие компоненты (т. Е. Те, чье определение всегда одинаково) в отдельный файл и всегда включать его.

0 голосов
/ 22 ноября 2010

это не вопрос использования spel, а больше XML, на самом деле вы не можете сделать это в XML (но xslt)

правильная пружина для этого сценария может быть http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-class в сочетании с «родительским» интерфейсом для BeanA и BeanB

вы можете передать параметр (system? Конкретно для среды выполнения?) Фабрике, которая создаст либо BeanA, либо BeanB

...