package com.sohu.cache.app; import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.LogFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.util.ClassUtils; import java.util.ArrayList; /** * Created by zhangyijun on 15/10/28. */ public class AliasesResourceSqlSessionFactoryBean extends SqlSessionFactoryBean { private static final Log LOGGER = LogFactory.getLog(SqlSessionFactoryBean.class); private String packages; public void setTypeAliasesPackage(String packages) { this.packages = packages; } public void setTypeAliasesClassResources(Resource[] resources) { ArrayList<Class<?>> classList = new ArrayList<Class<?>>(); for (int i = 0; i < resources.length; i++) { Resource resource = resources[i]; try { String className; if (resource instanceof ClassPathResource) { String path = ((ClassPathResource) resource).getPath(); className = getClassNameByPath(path); } else if (resource instanceof FileSystemResource) { String path = ((FileSystemResource) resource).getPath(); className = getClassNameByPath(path); } else { throw new RuntimeException("resources is unsupported"); } className = packages + className; Class<?> clazz = ClassUtils.resolveClassName(className, Thread.currentThread().getContextClassLoader()); classList.add(clazz); } catch (Exception e) { LOGGER.error(e.getMessage(),e); } } this.setTypeAliases(classList.toArray(new Class[0])); } public String getClassNameByPath(String path) { String className = path.substring(path.lastIndexOf('/'), path.length()); className = className.replace(".class", "").replace('/', '.'); return className; } }