@EnableWebMvc

时间:2019-08-02 18:45:19

标签: java spring spring-boot

如何根据项目中是否没有其他不同的,用@EnableWebMvc注释的bean来控制bean的创建?

我尝试了

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

如建议的here,但没有运气。当@EnableWebMvc出现时,我得到这种矛盾的状态

  

WebMvcAutoConfiguration:         不匹配:            -@ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy:全部)找到类型为的豆“ org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport” org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration(OnBeanCondition)

还有

  

ProblemModulesRegisterer匹配:         -@ConditionalOnMissingBean(类型:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy:全部)未找到任何bean (OnBeanCondition)

因此它找到了WebMvcConfigurationSupport类型的bean,但没有找到

作为另一种尝试,我还比较了带有@EnableWebMvc和不带有org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration的已注册bean,发现没有它,就有一个名为@ConditionalOnMissingBean(WebMvcAutoConfiguration.class)的bean。因此我尝试了WebMvcAutoConfiguration,但仍然无法正常工作。它表明了这种矛盾的状态

  

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:全部)未找到任何bean(OnBeanCondition)

还有

  

ProblemModulesRegisterer匹配:         -@ConditionalOnMissingBean(类型:org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; SearchStrategy:全部)未找到任何bean (OnBeanCondition)

因此WebMvcAutoConfiguration已匹配(已创建),并且缺少ActivityMainBinding activityBinding = DataBindingUtil .setContentView(this, R.layout.activity_main, new AppDataBindingComponent<>(this)); activityBinding.setLifecycleOwner(this); 的依赖项也已匹配

3 个答案:

答案 0 :(得分:0)

var successCallback = function(data) { //manipulate DOM to display data } var failureCallback = function(err) { //handle errors } window.addEventListener('DOMContentLoaded', function() { google.script.run.withSuccessHandler(successCallback).withFailureHandler(failureCallback).getData(rowNumber); }); 将执行您的代码,而您想要的与之相反-执行。也许您应该尝试将您发布的链接中示例中提供的@ConditionalOnMissingBean@ConditionalOnClass混合使用。

我已经使用了几个与数据库相关的bean,对@AutoConfigureAfterConditional的操作实际上可以解决问题。只是需要对您的应用程序有更好的了解,才能提供更具体的建议

答案 1 :(得分:0)

您需要确保在创建{strong> @ConditionalOnMissingBean之后 WebMvcConfigurationSupport带注释的bean。

从春季docs起,

  

当前bean所依赖的bean。指定的任何豆是   保证由容器在此bean之前创建。

按照here的说明,在 @DependsOn之外还使用@ConditionalOnMissingBean注释。

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

@Configuration
public class Config {

    @Bean
    @DependsOn({"webMvcConfigurationSupport"})
    @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
     public FileProcessor fileProcessor(){
        return new FileProcessor();
    }

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

答案 2 :(得分:0)

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

  

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

我试图在常规应用程序中使用注释。有关创建自动配置模块的更多信息,请检查official doc。一旦这样做(特别是将类添加到spring.factories),它就会通过使用

来检测@EnableWebMvc
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)