KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I would like to configure Spring via XML such that if a particular bean exists, it will be injected into the target bean. If it does not exist, a different, default bean, will be injected. For example if I have a file like this <bean id="carDriver" class="Driver"> <property name="car" value="SOME EXPRESSION GOES HERE, SEE ATTEMPT BELOW"/> </bean> <bead id="defaultCar" class="Car"> <property name="name" value="Honda Accord"/> </bean> And load it, I would like the defaultCar injected into the driver. However, if I also load the following file: <bean id="customCar" class="FlyingCar"> <property name="name" value="Rocket Car"/> <property name="maxAltitude" value="80000"/> </bean> I would want the customCar bean to be used instead of the defaultCar bean. My initial attempt does not work, but I think illustrates what I'm trying to achieve: <bean id="carDriver" class="Driver"> <property name="car" value="#{ @customCar eq null ? 'defaultCar' : 'customCar' }"/> </bean> I know how to do this with a PropertyPlaceholderConfigurer , but I don't want to have to provide a property file / VM property / environment variable / etc. in addition to the file that contains the custom bean. Thanks! Update: Based on the "use a factory bean" comments, I looked into this and came up with the following solution. First, I created a generic factory bean that allows you to specify a default bean name and an override bean name: public class DefaultOverrideFactoryBean implements FactoryBean, BeanFactoryAware { public Object getObject() throws Exception { return beanFactory.containsBean(overrideBeanName) ? beanFactory.getBean(overrideBeanName) : beanFactory.getBean(d
Tags (comma-separated)
Save Edits
Cancel