亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

@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 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號