返回介绍

文档

中间件

OAS 简介

实战指南

springfox 源码分析(六) Web 配置类扫描包作用探索

发布于 2022-12-06 22:06:15 字数 3019 浏览 0 评论 0 收藏 0

时间:2019-5-23 18:46:50

地点:家中

我们在上一篇中,知道了springfox一系列Plugin接口的实现、作用

而此时,我们联想到springfox为我们提供的Configuration配置类中使用了包路径扫描

先来看 OperationBuilderPlugin 的实现类之一 OperationDeprecatedReader 的代码

OperationDeprecatedReader.java

package springfox.documentation.spring.web.readers.operation;

import com.google.common.base.Optional;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.OperationBuilderPlugin;
import springfox.documentation.spi.service.contexts.OperationContext;

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class OperationDeprecatedReader implements OperationBuilderPlugin {
@Override
public void apply(OperationContext context) {
Optional<Deprecated> annotation = context.findAnnotation(Deprecated.class);
context.operationBuilder().deprecated(String.valueOf(annotation.isPresent()));
}

@Override
public boolean supports(DocumentationType delimiter) {
return true;
}
}

这是针对operation中接口是否过时进行处理的实现类

实现类位于 springfox.documentation.spring.web.readers.operation 包下,并且通过 @Component 注解进行bean的实例注入

此时,我们回过头来看 SpringfoxWebMvcConfiguration 的源码,源码中配置了 springfox.documentation.spring.web.readers.operation 扫描路径

@Configuration
@Import({ ModelsConfiguration.class })
@ComponentScan(basePackages = {
"springfox.documentation.spring.web.scanners",
"springfox.documentation.spring.web.readers.operation",
"springfox.documentation.spring.web.readers.parameter",
"springfox.documentation.spring.web.plugins",
"springfox.documentation.spring.web.paths"
})
@EnablePluginRegistries({ DocumentationPlugin.class,
ApiListingBuilderPlugin.class,
OperationBuilderPlugin.class,
ParameterBuilderPlugin.class,
ExpandedParameterBuilderPlugin.class,
ResourceGroupingStrategy.class,
OperationModelsProviderPlugin.class,
DefaultsProviderPlugin.class,
PathDecorator.class,
ApiListingScannerPlugin.class
})
public class SpringfoxWebMvcConfiguration {
//more..
}

@ComponentScan 注解此时配置了5个包路径,分别是:

  • springfox.documentation.spring.web.scanners
  • springfox.documentation.spring.web.readers.operation
  • springfox.documentation.spring.web.readers.parameter
  • springfox.documentation.spring.web.plugins
  • springfox.documentation.spring.web.paths

源码看到这里,我们应该明白,包括Plugin的接口实现类,都会通过 @ComponentScan 配置的扫描包路径一并全部注入到Spring容器中

而我们只需要在我们的springfox其他代码中通过 @Autowired 依赖注入即可进行相应的实体bean使用

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文