我有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之后完成的...那么为什么它没有选择我的呢?
1条答案
按热度按时间z18hc3ub1#
@CodnitionalOnBean
检查所提供类的bean是否存在于当前ApplicationContext
中。如果您使用@RestController
或您想要的任何注解来注解任何类,例如类ABC
,则bean的原始类将是ABC
(我说原创是因为Spring可能会用一些代理来 Package 你的bean,这完全是另一个主题),因此不满足@CodnitionalOnBean
内的条件。如果您需要创建一些配置bean以应对特定的控制器,那么只需使用
@CodnitionalOnBean(<YOUR CONTROLLER CLASS NAME, NOT THE ANNOTATION NAME>.class)
注解此配置类即可