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() {
    // 你的配置
}
相关推荐
涡能增压发动积21 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
云烟成雨TD21 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o21 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨21 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132121 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung21 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川1 天前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter