Spring的@Bean工作原理【swagger示例】

你的理解是错误的 !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 的工作原理:

  1. 扫描 @Configuration
  2. 找到所有 @Bean 方法
  3. 执行这些方法,将返回值注册为 Bean
  4. 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() {
    // 你的配置
}
相关推荐
Tony Bai1 小时前
“我曾想付钱给 Google 去工作”—— Russ Cox 深度访谈:Go 的诞生、演进与未来
开发语言·后端·golang
45288655上山打老虎1 小时前
C++完美转发
java·jvm·c++
Seven971 小时前
查找算法
java
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 公务员考试在线测试系统为例,包含答辩的问题和答案
java
serendipity_hky2 小时前
【SpringCloud | 第2篇】OpenFeign远程调用
java·后端·spring·spring cloud·openfeign
RwTo2 小时前
【源码】-Java线程池ThreadPool
java·开发语言
嘟嘟MD2 小时前
程序员副业 | 2025年11月复盘
后端·创业
SadSunset2 小时前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
汝生淮南吾在北2 小时前
SpringBoot+Vue养老院管理系统
vue.js·spring boot·后端·毕业设计·毕设
兮动人2 小时前
EMT4J定制规则版:Java 8→17迁移兼容性检测与规则优化实战
java·开发语言·emt4j