Spring Boot 之spring.factories
2023-09-14 09:06:17 时间
首先抛出一个问题:如果想要被Spring容器管理的Bean的路径不再Spring Boot 的包扫描路径下,怎么办呢?也就是如何去加载第三方的Bean 呢?
有两种方式可以解决:
这里我们使用Swagger的配置来做实验。
1:首先一个Swagger的配置类:SwaggerConfig
SwaggerConfig 代码:
@Configuration
@EnableSwagger2
public class SwaggerConfig implements EnvironmentAware {
private static final Logger log = LoggerFactory.getLogger(SwaggerConfig.class);
@Autowired
private Environment env;
@Value("${swagger.scan.package}")
private String swaggerScanPackage;
public SwaggerConfig() {
}
@Bean
public Docket createRestApi() {
Predicate<String> path = PathSelectors.any();
if (Arrays.asList(this.env.getActiveProfiles()).contains("prod")) {
path = PathSelectors.none();
}
log.info("####初始化createRestApi####swaggerScanPackage:" + this.swaggerScanPackage);
log.info(path.toString());
return (new Docket(DocumentationType.SWAGGER_2)).apiInfo(this.apiInfo()).select().apis(RequestHandlerSelectors.basePackage(this.swaggerScanPackage)).paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo() {
log.info("##################################初始化API信息################################################");
return (new ApiInfoBuilder()).title("APIs").description("…………").termsOfServiceUrl("https://js.dazhi.loan.com").version("1.0").build();
}
@Override
public void setEnvironment(Environment environment) {
}
}
2:再看我的工程结构吧:
发现我的SwaggerConfig 类和 SpringBoot 的启动类ConfigApplication.java 不在同一级目录下,所以当Spring Boot 自动扫描包的时候,是扫描不到我的SwaggerConfig 的配置的,也就在控制台没有Swagger的打印的信息:
所以这时候我如果想要把SwaggerConfig 加载到Spring容器中的话 要怎么办呢?下面介绍两种方式
①:在Spring Boot Application 主类上 使用@Import 注解
启动就可以看到Swagger的基础信息:
②:现在我们将其改造一下,采用spring.factories 的方式去加载SwaggerConfig类,在resources目录下新建一个META-INF 的目录,然后在
新建一个spring.factories 的文件,里面的内容为:
登录后复制
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sg.config.SwaggerConfig
然后在把Spring Boot 启动类上的@Import注释掉,启动发现也可以把SwaggerConfig加载到Spring 容器中
到这就完成了加载一个Spring 不能扫描到的一个类,他可以是第三方的,也可以是自己写的,只要是Spring Boot 默认扫描路径不能够扫描到,都可以使用这种方式去加载!!!
相关文章
- Spring MVC中Controller如何将数据返回给页面
- spring boot: java @interface注解
- spring相关jar包的作用讲解(转)
- Spring Boot Serverless 实战系列“架构篇” | 光速入门函数计算
- Spring Boot 如何在启动后执行初始化任务(转)
- Spring -- AOP
- spring boot:spring security+oauth2+sso+jwt实现单点登录(spring boot 2.3.3)
- spring boot:用zxing生成二维码,支持logo(spring boot 2.3.2)
- spring boot:使用async异步线程池发送注册邮件(spring boot 2.3.1)
- spring boot:使用多个redis数据源(spring boot 2.3.1)
- 将Spring Boot程序打包成docker镜像
- [Kotlin Spring boot] Dependency injection
- Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
- spring boot单元测试之十二:用RabbitMQ mock库做消息生产/消费的mock(spring boot 2.4.4)
- spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)
- spring boot:在项目中引入第三方外部jar包集成为本地jar包(spring boot 2.3.2)
- Spring的jar包下载及目录详解
- Spring Bean的属性注入
- Spring 基于构造函数的依赖注入
- 【已解决】IDEA 创建 spring 项目时出现Initialization failed for http://start.aliyun.com问题
- 一文解析Spring JDBC Template的使用指导
- Spring Boot Test单元测试——Junit4、Junit5区别与@ExtendWith不识别生效问题解析
- spring关于“transactionAttributes”的相关配置
- Spring Boot系列——日志配置
- spring boot 的JPA项目
- [spring学习]6、基于注解配置bean