@SpringBootApplication 注解 scanBasePackages的先后顺序导致的扫描失败问题总结
1、背景
在一个多module项目的开发过程中,有一个第三方依赖jar包 cn.hutool 中的SpringUtils死活扫描不到,当时的配置情况是这样的
启动类配置:
@SpringBootApplication(scanBasePackages = {"com.xx.xx.xx.A", "com.xx.xx.B","cn.hutool"})
@MapperScan("com.didiglobal.hr.global.platform.dao.mapper")
@Slf4j
public class Application {
public static void main(String[] args) {
long start = System.currentTimeMillis();
SpringApplication.run(Application.class, args);
log.info("Springboot start Success,cost:{}", System.currentTimeMillis() - start);
}
}
EventBus配置:
@Bean
public EventBus eventBus() {
EventBus eventBus = new EventBus();
Map<String, AbstractBaseSubscribe> beansOfSubscribe = SpringUtil.getBeansOfType(AbstractBaseSubscribe.class);
beansOfSubscribe.values().forEach(eventBus::register);
return eventBus;
}
启动时提示错误信息如下:
提示在实例化EventBus的时候出现了空指针异常
2、最终解决方案
@SpringBootApplication(scanBasePackages = {"com.xx.xx.xx.A", "cn.hutool", "com.xx.xx.B"})
@MapperScan("com.didiglobal.hr.global.platform.dao.mapper")
@Slf4j
public class Application {
public static void main(String[] args) {
long start = System.currentTimeMillis();
SpringApplication.run(Application.class, args);
log.info("Springboot start Success,cost:{}", System.currentTimeMillis() - start);
}
}
将 "cn.hutool" 放到了 "com.xx.xx.B" 前解决这个问题,说明 @SpringBootApplication 注解的 scanBasePackages 扫描包有先后顺序