spring boot @EnableWebMvc禁用springMvc自動配置原理。


說明:

  在spring boot中如果定義了自己的java配置文件,並且在文件上使用了@EnableWebMvc 注解,那么sprig boot 的默認配置就會失效。如默認的靜態文件配置路徑:"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/",將失效。而有效的配置將只有自己寫的java配置 。

原理淺析:

 1. 那么他是怎么將默認的配置都禁用的,跟蹤源碼分析下 ,首先看看@EnableWebMvc 這個注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(DelegatingWebMvcConfiguration.class) //導入DelegatingWebMvcConfiguration類
public @interface EnableWebMvc {
}

2.注解導入DelegatingWebMvcConfiguration類,而DelegatingWebMvcConfiguration 繼承 WebMvcConfigurationSupport 類

 

@Configuration
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
...//省略
}

3.來看看springMvc的自動配置類:

@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class,
        WebMvcConfigurerAdapter.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class WebMvcAutoConfiguration {
    .../省略
}    

看到標記黃色部分代碼沒,這個注解是條件注解,表示,如果容器中不存在 WebMvcConfigurationSupport這個類, WebMvcAutoConfiguration 配置類才會

才spring 加載。而我們使用注解@EnableWebMvc就把 WebMvcAutoConfiguration 這個類加載到了spring容器中 。所以 WebMvcAutoConfiguration 默認配置類將失效。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM