
com.aggrepoint.dao.DaoScannerConfigurer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of apdao Show documentation
Show all versions of apdao Show documentation
Data Access Object layer utilities
The newest version!
package com.aggrepoint.dao;
import static org.springframework.util.Assert.notNull;
import java.util.List;
import java.util.Map;
import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.PropertyValues;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyResourceConfigurer;
import org.springframework.beans.factory.config.TypedStringValue;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.BeanNameGenerator;
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.context.support.GenericApplicationContext;
import org.springframework.util.StringUtils;
/**
* @see org.mybatis.spring.mapper.MapperScannerConfigurer
* @author Jiangming Yang ([email protected])
*/
public class DaoScannerConfigurer implements
BeanDefinitionRegistryPostProcessor, InitializingBean,
ApplicationContextAware, BeanNameAware {
private String basePackage;
private ApplicationContext applicationContext;
private String entityManagerName;
private String sessionFactoryName;
private String beanName;
private boolean processPropertyPlaceHolders;
private BeanNameGenerator nameGenerator;
private List functions;
private List dataSources;
public String getBasePackage() {
return basePackage;
}
public void setBasePackage(String basePackage) {
this.basePackage = basePackage;
}
public String getEntityManagerName() {
return entityManagerName;
}
public void setEntityManagerName(String entityManagerName) {
this.entityManagerName = entityManagerName;
}
public String getSessionFactoryName() {
return sessionFactoryName;
}
public void setSessionFactoryName(String sessionFactoryName) {
this.sessionFactoryName = sessionFactoryName;
}
public List getDataSources() {
return dataSources;
}
public void setDataSources(List dataSources) {
this.dataSources = dataSources;
}
@Override
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
private String updatePropertyValue(String propertyName,
PropertyValues values) {
PropertyValue property = values.getPropertyValue(propertyName);
if (property == null) {
return null;
}
Object value = property.getValue();
if (value == null) {
return null;
} else if (value instanceof String) {
return value.toString();
} else if (value instanceof TypedStringValue) {
return ((TypedStringValue) value).getValue();
} else {
return null;
}
}
private void processPropertyPlaceHolders() {
Map prcs = applicationContext
.getBeansOfType(PropertyResourceConfigurer.class);
if (!prcs.isEmpty()
&& applicationContext instanceof GenericApplicationContext) {
BeanDefinition mapperScannerBean = ((GenericApplicationContext) applicationContext)
.getBeanFactory().getBeanDefinition(beanName);
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
factory.registerBeanDefinition(beanName, mapperScannerBean);
for (PropertyResourceConfigurer prc : prcs.values()) {
prc.postProcessBeanFactory(factory);
}
PropertyValues values = mapperScannerBean.getPropertyValues();
this.basePackage = updatePropertyValue("basePackage", values);
}
}
@Override
public void postProcessBeanDefinitionRegistry(
BeanDefinitionRegistry registry) throws BeansException {
if (this.processPropertyPlaceHolders)
processPropertyPlaceHolders();
DaoScanner scanner = new DaoScanner(registry, applicationContext,
nameGenerator, functions, entityManagerName,
sessionFactoryName, dataSources);
scanner.scan(StringUtils.tokenizeToStringArray(this.basePackage,
ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS));
}
@Override
public void setBeanName(String name) {
this.beanName = name;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void afterPropertiesSet() throws Exception {
notNull(this.basePackage, "Property 'basePackage' is required");
}
public void setProcessPropertyPlaceHolders(
boolean processPropertyPlaceHolders) {
this.processPropertyPlaceHolders = processPropertyPlaceHolders;
}
public BeanNameGenerator getNameGenerator() {
return nameGenerator;
}
public void setNameGenerator(BeanNameGenerator nameGenerator) {
this.nameGenerator = nameGenerator;
}
public void setFunctions(List funcs) {
this.functions = funcs;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy