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() {
    // 你的配置
}
相关推荐
IT_陈寒1 天前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
ServBay1 天前
为什么说 MCP 是 2026 年开发者必须掌握的黄金协议?
后端·mcp
程序员夏洛1 天前
Spring Boot 多模块项目中 IDEA 提示 Cannot resolve symbol 的一次排查记录
后端
子兮曰1 天前
OpenMontage 深度解剖:你的 AI 编程助手,其实是个视频工作室
前端·后端·ai编程
子兮曰1 天前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
爱勇宝1 天前
从 Ctrl+CV 到 Enter:程序员正在失去什么
前端·后端·程序员
码事漫谈1 天前
EdgeOne Makers + WorkBuddy:零基础也能快速搭建可上线的 AI 智能体(附图文教程)
后端
像我这样帅的人丶你还1 天前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩1 天前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
烤代码的吐司君1 天前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端