package net.paoding.rose.jade.context.spring; import java.util.Map; import net.paoding.rose.jade.dataaccess.DataSourceFactory; import net.paoding.rose.jade.dataaccess.DataSourceHolder; import net.paoding.rose.jade.statement.StatementMetaData; import org.springframework.beans.factory.ListableBeanFactory; /** * * @author 王志亮 [qieqie.wang@gmail.com] * */ public class SpringDataSourceFactoryDelegate implements DataSourceFactory { private ListableBeanFactory beanFactory; private DataSourceFactory dataSourceFactory; public SpringDataSourceFactoryDelegate(ListableBeanFactory beanFactory) { this.beanFactory = beanFactory; } @Override public DataSourceHolder getHolder(StatementMetaData metaData, Map<String, Object> runtimeProperties) { if (dataSourceFactory == null) { ListableBeanFactory beanFactory = this.beanFactory; if (beanFactory != null) { if (beanFactory.containsBeanDefinition("jade.dataSourceFactory")) { dataSourceFactory = (DataSourceFactory) beanFactory.getBean( "jade.dataSourceFactory", DataSourceFactory.class); } else { dataSourceFactory = new SpringDataSourceFactory(beanFactory); } this.beanFactory = null; } } return dataSourceFactory.getHolder(metaData, runtimeProperties); } }