You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring ConditionalOnBean无法检测到RestController类型Bean问题排查

问题分析与解决方案

核心问题

你遇到的自动配置未生效有两个关键原因:

1. 自动配置执行时机早于用户Bean创建

Spring Boot的自动配置类(标注@AutoConfiguration)默认优先级高于用户自定义Bean。当你的MyCustomAutoConfiguration执行@ConditionalOnBean检查时,通过@ComponentScan(比如@SpringBootApplication自带的扫描逻辑)加载的@RestController Bean还未完成初始化,因此条件判断返回false。

2. 条件判断逻辑匹配错误

@ConditionalOnBean(RestController.class)是查找类型为RestController的Bean,但你的@RestController标注在自定义类(比如DemoController)上,这些Bean的实际类型是自定义类,而非RestController本身。你需要的是检测标注了@RestController注解的Bean是否存在。


解决方案

方案一:修正条件逻辑+调整加载顺序

修改自动配置类,同时解决上述两个问题:

import org.springframework.core.Ordered;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.web.bind.annotation.RestController;

@AutoConfiguration
// 让自动配置在所有用户Bean之后执行
@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
// 检测标注了@RestController注解的Bean,而非类型为RestController的Bean
@ConditionalOnBean(annotation = RestController.class)
public class MyCustomAutoConfiguration {

    @Bean
    public MyBean myBean() {
        // 这里写MyBean的实例化逻辑
        return new MyBean();
    }
}

方案二:备选(仅检查Web环境与类存在)

如果你的需求是只要Spring MVC环境存在、RestController类可用就创建MyBean,无需检查具体的@RestController Bean实例,可以改用以下配置:

import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.web.bind.annotation.RestController;

@AutoConfiguration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass(RestController.class)
public class MyCustomAutoConfiguration {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

额外检查

确保你的自动配置类被Spring Boot正确识别:

  • Spring Boot 2.7+版本:在src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中添加全类名:
    com.your.package.MyCustomAutoConfiguration
    
  • 旧版本(2.2之前):在src/main/resources/META-INF/spring.factories中添加:
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.your.package.MyCustomAutoConfiguration
    

内容的提问来源于stack exchange,提问作者user1409534

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:50:40