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() {
    // 你的配置
}
相关推荐
BioRunYiXue2 分钟前
从现象到机制:蛋白降解调控研究的系统策略与实验设计
java·linux·运维·服务器·网络·人工智能·eclipse
希望永不加班3 分钟前
如何在 SpringBoot 里自定义 Spring MVC 配置
java·spring boot·后端·spring·mvc
weixin199701080164 分钟前
“迷你京东”全栈架构设计与实现
java·大数据·python·数据库架构
Welcome_Back9 分钟前
SpringBoot后端开发测试全指南
spring boot·后端·log4j
东离与糖宝12 分钟前
3月20日紧急修复|Spring AI双漏洞CVE-2026-22730/22729实战防护方案
java
东离与糖宝14 分钟前
Spring Boot 4.0适配JDK 26|一键升级与常见坑速解
java
大傻^18 分钟前
Spring AI Alibaba MCP协议实战:模型上下文协议集成与工具调用
java·人工智能·后端·spring·elasticsearch·springaialibaba
Via_Neo22 分钟前
JAVA中对数的表达,将浮点数转为保留指定位数的字符串
java·开发语言
左左右右左右摇晃23 分钟前
String、StringBuffer、StringBuilder的区别
java·笔记