前言: 项目中有多个模块,其中有些模块的包路径不在启动类的子路径下,此时我们怎么处理才能加载到这些类;
1 使用SpringBootApplication 中的scanBasePackages 属性;
@SpringBootApplication(scanBasePackages = {"com.xxx.xxx.路径1","com.xxx.xxx.路径2"})
public class SpringValidateApplication {
public static void main(String[] args) {
SpringApplication.run(SpringValidateApplication.class, args);
}
}
通过scanBasePackages 设置我们需要的所有需要扫描的包路径,需要注意的是默认如果不指定scanBasePackages,默认会扫描当前启动类所在的包路径以及子包的路径,如果指定后默认这个将不会再起作用,所以指定时,要考虑扫描的所有的需要spring管理的类。
2 使用import 可以单独引入所需要的类:
@Configuration
@Import({HttpRequestDynamic.class})
public class WebConfiguration implements WebMvcConfigurer {
@Autowired
private HttpRequestDynamic httpRequestDynamic;
/**
* 拦截器配置
*
* @param registry 注册类
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(httpRequestDynamic).addPathPatterns("/**")
.excludePathPatterns(
"/file/get/*",
"/image/view/*",
"/**/error"
);
}
}
@Import 中可以跟多个需要引入的类;
3 使用spring.factories 进行引入:
当项目中依赖的其它项目的jar 包,但是其它项目包路径不在当前启动类的包路径下,如果我们不行对当前项目进行包扫描路径的修改,可以通过对要引入的包的项目设置spring.factories 文件来达到目的;
3.1 在resources\META-INF文件夹下新建spring.factories 文件:
3.2 在spring.factories 文件中放入要加载的bean所在类:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
xxxx.xxx.WebConfiguration
如果需要引入多个类,则每个类以 " ,\ " 进行分隔,注意最后一个类没有" ,\ "
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
xxxx.MybatisFieldInterceptor,\
xxxx.MybatisInterceptorAuthority,\
xxxx.AuthorityConfigInit
4 参考:
4.1 从零搭建开发脚手架 Spring Boot配置扫描多个包目录的多种姿势;
4.2 spring注解之@Import注解的三种使用方式;
4.3 Spring的Factories机制介绍;