You can use a custom factory bean for this:
public class OptionalFactoryBean<T> implements BeanFactoryAware, FactoryBean<T> { private String beanName; public void setBeanName(String beanName) { this.beanName = beanName; } @Override public T getObject() throws Exception { T result; try { result = beanFactory.getBean(beanName); } catch (NoSuchBeanDefinitionException ex) { result = null; } return result; } private BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) { this.beanFactory = beanFactory; } private Class<?> objectType = Object.class; public void setObjectType(Class<?> objectType) { this.objectType = objectType != null? objectType : Object.class; } @Override public Class<?> getObjectType() { return objectType; } @Override public boolean isSingleton() { return true; } }
Spring for your optional bean will be:
<bean id="myBean" class="mypackage.OptionalFactoryBean" scope="singleton"> <property name="beanName" value="myRealBean"/> <property name="objectType" value="mypackage.MyRealBean"/> </bean>
And you will get null . Then you can define:
<bean id="myRealBean" class="mypackage.MyRealBean" ...> </bean>
if you want to enter some specific bean.
gpeche
source share