为了账号安全,请及时绑定邮箱和手机立即绑定

@EnableWebMvc 上的 Spring 条件 bean

@EnableWebMvc 上的 Spring 条件 bean

慕斯709654 2023-05-10 17:07:40
我如何根据项目中是否没有注释的另一个不同的 bean 来控制 bean 的创建@EnableWebMvc?我试过@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)正如这里所建议的,但没有运气。当@EnableWebMvc 存在时,我得到了这种矛盾的状态WebMvcAutoConfiguration:不匹配:-@ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;SearchStrategy:全部)找到类型为“org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport”的bean org .springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration (OnBeanCondition)并且ProblemModulesRegisterer 匹配:- @ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;SearchStrategy:全部)没有找到任何 beans (OnBeanCondition)所以它找到并没有找到类型的beanWebMvcConfigurationSupport作为另一种尝试,我还比较了注册的 bean 和没有注册的 bean @EnableWebMvc,发现没有它,有一个名为org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration. 所以我尝试了一个,@ConditionalOnMissingBean(WebMvcAutoConfiguration.class)但它仍然不起作用。它显示了这种矛盾的状态WebMvcAutoConfiguration匹配:- @ConditionalOnClass 找到所需的类 'javax.servlet.Servlet'、'org.springframework.web.servlet.DispatcherServlet'、'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition) - 找到'会话'范围(OnWebApplicationCondition)-@ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;SearchStrategy:all)没有找到任何bean(OnBeanCondition)并且ProblemModulesRegisterer 匹配:- @ConditionalOnMissingBean(类型:org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;SearchStrategy:全部)没有找到任何 beans (OnBeanCondition)如此WebMvcAutoConfiguration匹配(已创建)并且 missing 的依赖项WebMvcAutoConfiguration也匹配
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

@ConditionalOnMissingBean将执行您的代码,而您想要的是相反的-执行。也许您应该尝试混合使用@ConditionalOnClass@AutoConfigureAfter在您发布的链接中的示例中提供。

我已经在一些与数据库相关的 bean 和Conditionals 的操作中使用过,并且AutoconfigureAfter确实做到了这一点。只需要更好地了解您的应用程序,以便能够提供更具体的建议


查看完整回答
反对 回复 2023-05-10
?
慕村225694

TA贡献1880条经验 获得超4个赞

问题是您只能@ConditionalOnMissingBean在自动配置上下文中使用。javadoc 说

该条件只能匹配到目前为止已被应用程序上下文处理的 bean 定义,因此,强烈建议仅在自动配置类上使用该条件

我试图在常规应用程序中使用注释。一旦我这样做了(具体来说,将类添加到),它就可以通过使用来spring.factories检测@EnableWebMvc

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)


查看完整回答
反对 回复 2023-05-10
?
浮云间

TA贡献1829条经验 获得超4个赞

您需要确保@ConditionalOnMissingBean带注释的 bean 创建将在创建 WebMvcConfigurationSupport发生。

来自 spring文档

当前 bean 所依赖的 beans。指定的任何 bean 都保证在该 bean 之前由容器创建。

除了此处解释的之外,还使用@DependsOn注释。 @ConditionalOnMissingBean

并确保您在@configuration带注释的类中执行这些操作。

@Configuration

public class Config {


    @Bean

    @DependsOn({"webMvcConfigurationSupport"})

    @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

     public FileProcessor fileProcessor(){

        return new FileProcessor();

    }

在此示例中,仅当缺少 webMvcConfigurationSupport bean 时才会创建 fileProcessor。


查看完整回答
反对 回复 2023-05-10
  • 3 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信