Spring ConditionalOnBean未检测到类型为RestController的Bean

dldeef67  于 2023-01-30  发布在  Spring
关注(0)|答案(1)|浏览(152)

我有Sping Boot 应用程序,我创建了自己的自动配置,如果上下文中存在任何RestController,该自动配置将创建Bean。
它看起来像这样:

@AutoConfiguration
@ConditionalOnBean(RestController.class)
public class MyCustomAutoConfiguration {

  @Bean
  public MyBean myBean(){
    // code to create my bean
  }
}

我定义了一个用@RestController标注的类,当我访问它时,它可以工作。但是我的自动配置没有启动。我得到了以下内容:
条件”:“OnBean条件”“,消息”:“@条件OnBean(类型:网站绑定注解。检索策略:全部)未找到任何类型为org.springframework.web.bind.annotation.RestController的Bean”}],“匹配”:[]}
据我所知,自动配置是在组件扫描检测到类型为restcontroller的bean之后完成的...那么为什么它没有选择我的呢?

z18hc3ub

z18hc3ub1#

@CodnitionalOnBean检查所提供类的bean是否存在于当前ApplicationContext中。如果您使用@RestController或您想要的任何注解来注解任何类,例如类ABC,则bean的原始类将是ABC(我说原创是因为Spring可能会用一些代理来 Package 你的bean,这完全是另一个主题),因此不满足@CodnitionalOnBean内的条件。
如果您需要创建一些配置bean以应对特定的控制器,那么只需使用@CodnitionalOnBean(<YOUR CONTROLLER CLASS NAME, NOT THE ANNOTATION NAME>.class)注解此配置类即可

相关问题