Java @EnableWebMvc上的Spring条件bean
如何根据项目中是否没有另一个不同的bean(用Java @EnableWebMvc上的Spring条件bean,java,spring,spring-boot,Java,Spring,Spring Boot,如何根据项目中是否没有另一个不同的bean(用@EnableWebMvc注释)来控制bean的创建 我试过了 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) 正如建议的那样,但运气不好。当@EnableWebMvc存在时,我得到了这种矛盾的状态 WebMVCAUTO配置: 不匹配: -@ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.an
@EnableWebMvc
注释)来控制bean的创建
我试过了
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
正如建议的那样,但运气不好。当@EnableWebMvc存在时,我得到了这种矛盾的状态
WebMVCAUTO配置:
不匹配:
-@ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;SearchStrategy:all)找到类型为“org.springframework.web.servlet.config.annotation.org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration”的bean(OnBeanCondition)
而且
问题模块注册器匹配:
-@ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.annotation.webmvcConfiguration支持;SearchStrategy:all)未找到任何bean(OnBeanCondition)
因此,它找到了类型为WebMvcConfigurationSupport
作为另一种尝试,我还比较了注册bean是否使用@EnableWebMvc
,并注意到没有它,有一个bean名为org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
。所以我尝试了一个@ConditionalOnMissingBean(WebMvcAutoConfiguration.class)
,但仍然不起作用。它显示了这种矛盾的状态
WebMvcAutoConfiguration匹配的:
-@conditionalclass找到了必需的类“javax.servlet.servlet”、“org.springframework.web.servlet.DispatcherServlet”、“org.springframework.web.servlet.config.annotation.webmvcconfiguer”(OnClassCondition)
-找到“会话”作用域(OnWebApplicationCondition)
-@ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;SearchStrategy:all)未找到任何bean(OnBeanCondition)
而且
问题模块注册器匹配:
-@ConditionalOnMissingBean(类型:org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;SearchStrategy:all)未找到任何bean(OnBeanCondition)
因此,
WebMvcAutoConfiguration
匹配(已创建)并且缺少WebMvcAutoConfiguration
的依赖项也匹配了
将执行您的代码,而您想要的是相反的-不执行。也许您应该尝试混合使用您发布的链接中示例中提供的@ConditionalOnClass
和@AutoConfigureAfter
我在一些与数据库相关的bean中使用了
Conditional
s和AutoconfigureAfter
的操作,实际上就是这样。只需要更好地了解您的应用程序,就可以提供更具体的建议@ConditionalOnMissingBean
将执行您的代码,而您想要的是相反的-而不是执行。也许您应该尝试混合使用您发布的链接中示例中提供的@ConditionalOnClass
和@AutoConfigureAfter
我在一些与数据库相关的bean中使用了
Conditional
s和AutoconfigureAfter
的操作,实际上就是这样。只需更好地了解您的应用程序,就可以提供更具体的建议您需要确保在创建后创建带注释的bean
从春天开始
当前bean所依赖的bean。指定的任何bean都是
保证在这个bean之前由容器创建
除了如上所述的@ConditionalOnMissingBean
之外,还使用@DependsOn
注释
并且还要确保您是在@configuration
注释类中执行这些操作的
@Configuration
public class Config {
@Bean
@DependsOn({"webMvcConfigurationSupport"})
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
public FileProcessor fileProcessor(){
return new FileProcessor();
}
在本例中,仅当webMvcConfigurationSupport bean丢失时才会创建fileProcessor。您需要确保
@conditionalMissingBean
注释bean的创建将在创建后进行
从春天开始
当前bean所依赖的bean。指定的任何bean都是
保证在这个bean之前由容器创建
除了如上所述的@ConditionalOnMissingBean
之外,还使用@DependsOn
注释
并且还要确保您是在@configuration
注释类中执行这些操作的
@Configuration
public class Config {
@Bean
@DependsOn({"webMvcConfigurationSupport"})
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
public FileProcessor fileProcessor(){
return new FileProcessor();
}
在本例中,仅当webMvcConfigurationSupport bean丢失时才会创建fileProcessor。问题是您只能在自动配置上下文中使用
@conditionalMissingBean
。javadoc说
该条件只能与应用程序上下文迄今为止处理过的bean定义相匹配,因此,强烈建议仅在自动配置类上使用该条件
我试图在常规应用程序中使用注释。有关创建自动配置模块的更多信息,请查看。一旦我这样做了(特别是,将类添加到spring.factories
),它就可以使用
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
问题是您只能在自动配置上下文中使用
@ConditionalOnMissingBean
。javadoc说
该条件只能与应用程序上下文迄今为止处理过的bean定义相匹配,因此,强烈建议仅在自动配置类上使用该条件
我试图在常规应用程序中使用注释。有关创建自动配置模块的更多信息,请查看。一旦我这样做了(具体来说,添加