到目前为止,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。
感谢您的帮助。
答案 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