为了让项目结构更清晰在抽取部分通用配置的时候,遇到了一个问题就是@MapperScan的basePackages属性无法通过spring占位符动态配置,于是查看了一下MapperScan注解的属性加载方式,然后得到了解决方案
方案:
1.重新定义自己的MapperScan注解,内容都一样只是@Import的类改为自己写的
2.编写自己的MapperScannerRegistrar,主要区别在于图中这块代码的解析方式改为支持spring占位符的方式解析
3.之后用自己的MapperScan注解去进行spring占位符的方式配置
源码贴一下:
MapperScan.java
/** * @Description 自定义MapperScan实现属性能用spring占位符 * @Author Peihan.Zhang * @CreateTime 2019/11/4 * @Version 0.0.1 * @Email zhangpeihan@jchzbj.com * @param */ package com.alicyu.config; import java.lang.annotation.Annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.mybatis.spring.mapper.MapperFactoryBean; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.context.annotation