我试图弄清楚是否可以通过系统属性更改弹簧别名配置。
这就是配置:
<beans>
<bean id="beanOne" ... />
<bean id="beanTwo" ... />
<bean id="beanThree" ... />
<alias name="beanOne" alias="beanToUse" />
<bean id="consumer" ...>
<constructor-arg ref="beanToUse" />
</bean>
</beans>
我希望能够使用JVM属性,例如使用-Duse=beanThree
为别名选择另一个bean。
不幸的是,使用直接解决方案<alias name="#{systemProperties.use}" alias="beanToUse" />
会引发NoSuchBeanDefinitionException
例外:(
有什么建议吗?
答案 0 :(得分:2)
您是否尝试使用spring 3.1配置文件?
<beans>
<bean id="beanOne" ... />
<bean id="beanTwo" ... />
<bean id="beanThree" ... />
<beans profile="A">
<alias name="beanOne" alias="beanToUse" />
</beans>
<beans profile="B">
<alias name="beanTwo" alias="beanToUse" />
</beans>
<bean id="consumer" ...>
<constructor-arg ref="beanToUse" />
</bean>
</beans>
并通过系统属性-Dspring.profiles.active=A
进行选择。我没有在配置文件中尝试过别名,但您可以在每个配置文件中使用其他beanToUse
定义:
<beans>
<beans profile="A">
<bean id="beanToUse" ... defined as beanOne ... />
</beans>
<beans profile="B">
<bean id="beanToUse" ... defined as beanTwo .../>
</beans>
<bean id="consumer" ...>
<constructor-arg ref="beanToUse" />
</bean>
</beans>
答案 1 :(得分:1)
以下是使用SpEL执行此操作的另一种方法。 我有两个DataStrategy类型的实现,包含bean ids testDataStrategy和realDataStrategy
我可以通过设置属性&quot; data.strategy&#39;来选择bean。在我的Java项目的Property文件中。
<bean id="myBeanId" class="com.some.path.MyBeanClass" >
<property name="dataStrategy" value="# {'${data.strategy}'.equalsIgnoreCase('TEST_DATA') ? testDataStrategy : realDataStrategy}" />
</bean>