你的理解是错误的 !Swagger 不会寻找特定名称的方法。
真相是:
Spring 通过 @Bean 注解来识别配置,不关心方法名。
验证:
方法1:任意名称都可以
java
@Bean
public Docket myCustomApi() { // 任意名字
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.aiwei.controller"))
.paths(PathSelectors.any())
.build();
}
方法2:甚至可以用多个 Docket
java
@Bean
public Docket adminApi() { // 管理端API
return new Docket(DocumentationType.SWAGGER_2)
.groupName("admin")
.select()
.apis(RequestHandlerSelectors.basePackage("com.aiwei.admin.controller"))
.paths(PathSelectors.any())
.build();
}
@Bean
public Docket userApi() { // 用户端API
return new Docket(DocumentationType.SWAGGER_2)
.groupName("user")
.select()
.apis(RequestHandlerSelectors.basePackage("com.aiwei.user.controller"))
.paths(PathSelectors.any())
.build();
}
Spring 的工作原理:
- 扫描
@Configuration类 - 找到所有
@Bean方法 - 执行这些方法,将返回值注册为 Bean
- Swagger 自动发现类型为
Docket的 Bean
java
// Spring 内部类似这样:
Map<String, Object> beans = new HashMap<>();
beans.put("docket", docket()); // 方法名成为 Bean name
beans.put("myCustomApi", myCustomApi());// 但类型都是 Docket.class
为什么大家都用 docket()?
历史原因:
- SpringFox 官方示例用了
docket() - 教程和博客互相抄袭这个命名
- 形成了"约定俗成"
但实际上:
java
// 这些都可以正常工作:
@Bean
public Docket createSwaggerConfig() { ... }
@Bean
public Docket apiDocumentation() { ... }
@Bean
public Docket customDocket() { ... }
@Bean
public Docket myApi() { ... }
结论:
你可以安全地改名 ,Swagger 是通过 Bean 类型 Docket 来识别的,不是通过方法名。
推荐用更有意义的名字,比如:
java
@Bean
public Docket planeManagementApi() {
// 你的配置
}