SpringBoot,今年才开始在生产项目使用。
今天遇到一个坑。
项目结构
com.x.controller
com.x.service
com.x 下 入口 MainApp.java
把另外一个项目,整合进当前项目。
为了区别,controller和service直接放入x目录。
有个拦截器 DataPermissionInterceptor
@Component
@Aspect
@Slf4j
@Order(200)
public class DataPermissionInterceptor
打了断点,没进去。
首先,想的是,是不是配置了 com.x 目录,发现没有。
然后,把com.y.DataPermissionInterceptor 移动到 com.x 目录,发现断点进去了。
因此,猜测 就是扫描包路径的问题。
心得
使用SpringBoot之类的框架,一定需要对启动 加载之类的原理机制 研究下。
不然遇到问题,根本想起来为啥。
源码之类的,是否需要读,可以根据个人情况。
网上参考了资料
SpringBoot包扫描机制
javascript:void(0)
“由于SpringBoot默认包扫描机制是:从启动类所在包开始,扫描当前包及其子包下的所有文件。”
MainApp的包是 com.x,因此只会扫描com.x 下面的包和类,不会扫描com.y下面的。
解决办法:
都放到com.x下,极简。
或者手动配置
@SpringBootApplication(scanBasePackages="com")
public class AccountApplication {}