Code:
package your.package;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNotOfRequiredTypeException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.util.ClassUtils;
public class Schema1DaoFactory implements ApplicationContextAware {
ApplicationContext applicationContext;
private BeanDefinitionRegistry registry;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (!ClassUtils.isAssignableValue(BeanDefinitionRegistry.class, applicationContext)) {
throw new BeanNotOfRequiredTypeException("allicationContext", BeanDefinitionRegistry.class, applicationContext.getClass());
} else {
this.applicationContext = applicationContext;
registry = (BeanDefinitionRegistry) applicationContext;
}
}
public UserDao getDao() {
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(UserDao.class);
beanDefinition.setLazyInit(false);
beanDefinition.setAbstract(false);
beanDefinition.setAutowireCandidate(true);
//determine bean's scope
beanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
//get bean's constructor from somewhere
Object constructor0 = new Object();
beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(0, constructor0);
//Object constructor1....
//add more construtor ....
Object propertyObject = new Object();
beanDefinition.getPropertyValues().add("someproperty", propertyObject);
//add more properties
//register userdao definition
registry.registerBeanDefinition("userDao", beanDefinition);
UserDao result = applicationContext.getBean("userDao", UserDao.class);
//remove definition if no more required.
registry.registerBeanDefinition("userDao", beanDefinition);
return result;
}
}