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 {}