获取Spring容器
及要得到Spring的ApplicationContext对象,可以创建一个类实现于org.springframework.context.ApplicationContextAware
接口。
public class DataSourceCreator implements ApplicationContextAware {
private ConfigurableApplicationContext applicationContext = null;
public ConfigurableApplicationContext getApplicationContext() {
return applicationContext;
}
......
通过Spring容器获得对象工厂类DefaultListableBeanFactory
private DefaultListableBeanFactory beanFactory = null;
this.beanFactory = (DefaultListableBeanFactory) this.applicationContext.getAutowireCapableBeanFactory();
创建数据源对象定义
使用org.springframework.beans.factory.support.BeanDefinitionBuilder
,创建数据源对象并设置属性,下面以com.alibaba.druid.pool.DruidDataSource
数据源为例:
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(com.alibaba.druid.pool.DruidDataSource.class);
builder.setInitMethodName("init");
builder.setDestroyMethodName("close");
builder.addPropertyValue("driverClassName", datasource.getDriverClass());
builder.addPropertyValue("url", datasource.getJdbcUrl());
LogUtils.getSingleton().debug(datasource.getJdbcUrl());
builder.addPropertyValue("username", datasource.getUser());
builder.addPropertyValue("password", datasource.getPassword());
builder.addPropertyValue("initialSize", 1);
注册数据源对象定义
this.beanFactory.registerBeanDefinition(datasource.getDatasourceName(), builder.getBeanDefinition());
完成,以下是完整的代码:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
import com.going100.datasource.domain.Datasource;
import com.going100.nifty.common.util.LogUtils;
@Component
public class DataSourceCreator implements ApplicationContextAware {
private ConfigurableApplicationContext applicationContext = null;
private DefaultListableBeanFactory beanFactory = null;
public ConfigurableApplicationContext getApplicationContext() {
return applicationContext;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = (ConfigurableApplicationContext) applicationContext;
this.beanFactory = (DefaultListableBeanFactory) this.applicationContext.getAutowireCapableBeanFactory();
}
public void createDruidDataSource(Datasource datasource) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(com.alibaba.druid.pool.DruidDataSource.class);
builder.setInitMethodName("init");
builder.setDestroyMethodName("close");
builder.addPropertyValue("driverClassName", datasource.getDriverClass());
builder.addPropertyValue("url", datasource.getJdbcUrl());
LogUtils.getSingleton().debug(datasource.getJdbcUrl());
builder.addPropertyValue("username", datasource.getUser());
builder.addPropertyValue("password", datasource.getPassword());
builder.addPropertyValue("initialSize", 1);
this.beanFactory.registerBeanDefinition(datasource.getDatasourceName(), builder.getBeanDefinition());
}
}
网友评论