问题描述
项目中采用了maven 分布式的模块开发。其中baseFrame 模块依赖common模块。
在common中配置了一些公共的基础类。如工具类,统一异常处理,AOP日志输出,filter等等。
然而在使用中,发现其中的一些辅助类并没有生效。
原因分析
spring 在初始化时,默认是扫描启动类所在目录,将所有带注解的java类进行统一管理。由于common模块并不在启动类的所在目录,所以其中的bean是没有被初始化的。这时候就需要我们制定需要扫描的目录,其只要实现依靠@ComponentScan注解。
解决方案
在启动类上通过@ComponentScan注解引入其他模块的目录。
@SpringBootApplication
@MapperScan("jaylen.stocks.dao")
@ComponentScan(basePackages={"cn.jaylen.common"})
public class BaseFrameApplication {
public static void main(String[] args) {
SpringApplication.run(BaseFrameApplication.class, args);
}
}
引入过后,确实能加载到common下面的所有bean。
但是@ComponentScan()注解会覆盖spring默认的扫