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() {
    // 你的配置
}
相关推荐
曹牧24 分钟前
文档格式:OFD
java
豆角焖肉1 小时前
Maven进阶与搭建私服
java·maven
空中湖1 小时前
Spring AI Agent 编排:ReAct 模式 + 多 Agent 协作实战
人工智能·spring·react.js
大不点wow1 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
止语Lab1 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活1 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
噢,我明白了1 小时前
Java中日期和字符串的处理
java·开发语言·日期
程序员天天困1 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn1 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
dkbnull1 小时前
Spring Boot请求处理组件对比详解
java·spring boot