如何根据项目中是否没有其他不同的,用@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);
的依赖项也已匹配
答案 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,对@AutoConfigureAfter
和Conditional
的操作实际上可以解决问题。只是需要对您的应用程序有更好的了解,才能提供更具体的建议
答案 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)