package message.mybatis.configs.parser; import message.template.resource.ThymeleafTemplateResource; import message.utils.StringUtils; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionReader; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.core.io.Resource; import org.w3c.dom.Element; import java.util.HashMap; import java.util.Map; /** * mybatis的一些配置动态引入到spring上下文. * * @author sunhao(sunhao.java@gmail.com) * @version V1.0, 15/6/26 上午12:18 */ public class MyBatisConfigParser implements BeanDefinitionParser { private static final String MYBATIS_TEMPLATE_LOCATION = "META-INF/template/mybatis.xml"; @Override public BeanDefinition parse(Element element, ParserContext parserContext) { //bean对象注册机 BeanDefinitionRegistry registry = parserContext.getRegistry(); //动态注册mybatis的相关配置 dynamicLoadConfigBean(element, registry); return null; } private void dynamicLoadConfigBean(Element element, BeanDefinitionRegistry registry) { Map<String, Object> context = new HashMap<String, Object>(); context.put("dataSource", element.getAttribute("dataSource")); String basePackage = element.getAttribute("basePackage"); context.put("basePackage", basePackage); context.put("useFlyway", element.getAttribute("useFlyway")); context.put("migration", element.getAttribute("migration")); context.put("dbType", element.getAttribute("dbType")); String typeHandlersLocations = element.getAttribute("typeHandlersLocations"); if(StringUtils.isEmpty(typeHandlersLocations)) { typeHandlersLocations = basePackage + ".dao.types"; } context.put("typeHandlersLocations", typeHandlersLocations); BeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(registry); Resource resource = new ThymeleafTemplateResource(MYBATIS_TEMPLATE_LOCATION, context, "xml"); beanDefinitionReader.loadBeanDefinitions(resource); } }