swagger2.0使用及原理

本文介绍了Swagger2.0的使用步骤,包括引入依赖、配置Docket和访问在线文档。同时,深入探讨了Swagger的工作原理,详细阐述了如何将API解析存储到内存,并通过/v2/api-docs接口读取内存数据。讲解了Swagger2.0启动过程中的关键组件,如DocumentationPluginsBootstrapper、DocumentationCache和Swagger2Controller的作用。

一、swagger2.0使用

1.引入依赖,构造Docket类用于展示,加注解 @EnableSwagger2

2.默认在线文档地址 http://localhost:6050/swagger-ui.html

3.swagger格式文件地址 http://localhost:6050/v2/api-docs

二、swagger大致原理

2.1 将api解析存储到内存

1.通过@EnableSwagger2注解:

1)import了类Swagger2DocumentationConfiguration。

2)Swagger2DocumentationConfiguration实例化了两个类PropertySourcedRequestMappingHandlerMappingSwagger2Controller(后面会讲)。

3)Swagger2DocumentationConfiguration又import了类SpringfoxWebMvcConfiguration。

4)SpringfoxWebMvcConfiguration利用spring注解@EnablePluginRegistries向spring上下文注入了对URL做各种解析的PluginRegistry实例,实例名为插件名首字母小写+Registry(注:@EnablePluginRegistries注解是spring-plugin模块提供的一个基于Plugin类型注册PluginRegistry实例到Spring上下文的注解)。

2. 以上PluginRegistry实例会被DocumentationPluginsManager获得并管理起来。

3. 最重要的引导类DocumentationPluginsBootstrapper:

1)@Component注解,代表它会被扫描到。

2)内置了DocumentationPluginsManager,表示它要用各种Plugin。

3)实现了SmartLifecycle接口,代表它会在spring启动过程中执行start()方法。

start()方法一顿解析,(重点看scanDocumentation(buildContext(each))这一行)完了存储到DocumentationCache。

2.2 通过/v2/api-docs读取内存中的解析数据

1. 回头看刚开始的注解,实例化了两个类PropertySourcedRequestMappingHandlerMappingSwagger2Controller。

2. Swagger2Controller只定义了一个接口/v2/api-docs,从DocumentationCache中获取数据。

@Controller
@ApiIgnore
public class Swagger2Controller {

public static final String DEFAULT_URL = "/v2/api-docs";

...

}

3. PropertySourcedRequestMappingHandlerMapping,继承了RequestMappingHandlerMapping,重写了initHandlerMethods方法,根据注解@PropertySourcedMapping专扫Swagger2Controller。

附springmvc大致原理:

1)spring启动→DispatcherServlet→启动各种HandlerMapping→调用initHandlerMethods→各HandlerMapping将自己扫到的映射保存到自己内部。

2)http请求→DispatcherServlet→匹配适合的HandlerMapping→处理。

参考:https://developer.aliyun.com/article/599809

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值