SpringMVC的自定义配置和自动化配置
创始人
2024-05-29 07:15:10
0

SpringBoot的自动配置MVC处理加载逻辑

基于Spring Boot的MVC自动化配置由WebMvcAutoConfiguration类完成,部分关键源码:

@AutoConfiguration(after = { DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,ValidationAutoConfiguration.class })
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
public class WebMvcAutoConfiguration {//省略源码......@SuppressWarnings("deprecation")@Configuration(proxyBeanMethods = false)@Import(EnableWebMvcConfiguration.class)@EnableConfigurationProperties({ WebMvcProperties.class, WebProperties.class })@Order(0)public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {//省略源码......}@Configuration(proxyBeanMethods = false)@EnableConfigurationProperties(WebProperties.class)public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration implements ResourceLoaderAware {//省略源码......}
}
  • 自动化配置类(带有注解@AutoConfiguration)可以通过/META-INF/spring.factories文件引入

  • 从WebMvcAutoConfiguration的类级注解@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })可以看出类路径下的Servlet、DispatcherServlet和WebMvcConfigurer类会触发SpringBoot的自动化配置

  • 从WebMvcAutoConfiguration的类级注解@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)可以看出,自定义配置的WebMvcConfigurationSupport类会使得SpringBoot的MVC自动化配置失效,那么自定义配置的WebMvcConfigurationSupport将全面接管MVC的配置

  • WebMvcAutoConfigurationAdapter(WebMvcAutoConfiguration的静态内部类)会引入EnableWebMvcConfiguration配置类(WebMvcAutoConfiguration的静态内部类),EnableWebMvcConfiguration是DelegatingWebMvcConfiguration的一个子类,在DelegatingWebMvcConfiguration类中会自动注入所有的MVC配置类WebMvcConfigurer,DelegatingWebMvcConfiguration的部分源码如下:

@Configuration(proxyBeanMethods = false)
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {//省略源码......@Autowired(required = false)public void setConfigurers(List configurers) {if (!CollectionUtils.isEmpty(configurers)) {this.configurers.addWebMvcConfigurers(configurers);}}//省略源码......}

使用@EnableWebMvc配置MVC

从注解源码可以看出@EnableWebMvc引入一个DelegatingWebMvcConfiguration类实现MVC的配置,DelegatingWebMvcConfiguration的引入会使得SpringBoot的MVC自动化配置全部失效(因为DelegatingWebMvcConfiguration是WebMvcConfigurationSupport的子类,前文已经讲述过原因),所有的MVC相关的配置都需要手动完成,所以SpringBoot项目不建议使用@EnableWebMvc处理SpringMVC的配置。

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

那么怎样既可以保留SpringBoot关于MVC的自动化配置又能自定义扩展配置呢,不要使用不使用@EnableWebMvc注解注解,同时有以下两种方式扩展配置:

  1. 直接实现WebMvcConfigurer接口实现MVC自定义扩展配置(建议)

  1. 直接继承WebMvcConfigurerAdapter实现MVC自定义扩展配置

这里需要注意的是实现WebMvcConfigurer接口和继承WebMvcConfigurerAdapter是一样的效果,其实WebMvcConfigurerAdapter就是WebMvcConfigurer接口的一个空实现,因为Java8之后接口中可以存在default方法,WebMvcConfigurerAdapter中的空方法可以直接定义为WebMvcConfigurer中的default方法

相关内容

热门资讯

鲁迅《影的告别》赏读 鲁迅《影的告别》赏读【鲁迅《影的告别》原文】  人睡到不知道时候的时候,就会有影来告别,说出那些话—...
描写长江的古诗 描写长江的古诗精选  在现实生活或工作学习中,大家对古诗都再熟悉不过了吧,古诗的格律限制较少。那么你...
描写梅花的诗句分享 描写梅花的诗句分享  梅花是中国十大名花之首,与兰花、竹子、菊花一起列为“四君子”,与松、竹并称为“...
咏物言志的诗句 有关咏物言志的诗句  在日常学习、工作和生活中,大家都对那些朗朗上口的诗句很是熟悉吧,诗句具有语言高...
苏轼较有名诗词 苏轼较有名诗词  苏轼是宋代文学最高成就的代表,并在诗、词、散文、书、画等方面取得了很高的成就。下面...
重阳节的经典诗句古诗 重阳节古诗是一种语言文字艺术,它有艺术的基本特点,但又区别于书法、绘画、雕塑等视觉艺术。下面是小编给...
描写四季的古诗 描写四季的古诗集锦  在日常的学习、工作、生活中,许多人都接触过一些比较经典的古诗吧,古诗可分为古体...
描写荷花的超经典诗句 描写荷花的超经典诗句  荷花,我要赞美的不是你的美艳与色彩。我想说,不管气候多么炎热,地势多么险恶,...
描写昆明大观楼的诗 描写昆明大观楼的诗  在学习、工作乃至生活中,大家对古诗都再熟悉不过了吧,古诗作为一种诗歌体裁,指的...
离别祝福的诗句 离别祝福的诗句  人生路漫漫,你我相遇又分离。相聚总是短暂,分别却是久长,唯愿彼此的心儿能紧紧相随,...
赞美南街村的诗句参考 赞美南街村的诗句参考  (第一首)  春冬替换亦葱笼,奔富唯凭集体功。  全面腾飞强政企,亿元积累脱...
“昨夜星辰昨夜风,画楼西畔桂... “昨夜星辰昨夜风,画楼西畔桂堂东”这两句是用追忆的形式写出夜晚情侣相聚之况——昨天晚上,满天星斗,微...
赞美老师的经典诗句 赞美老师的经典诗句赞美老师的'经典诗句1  落红不是无情物,化作春泥更护花。  春蚕到死丝方尽,蜡炬...
诗经:頍弁   《诗经:頍弁》  有頍者弁,实维伊何?  尔酒既旨,尔肴既嘉。  岂伊异人?兄弟匪他。  茑与女...
表示感谢的诗句 表示感谢的诗句  在平日的学习、工作和生活里,大家都收藏过令自己印象深刻的诗句吧,诗句具有精炼含蓄的...
元宵佳节诗句 元宵佳节诗句  导语:送你无数灯笼,带去无尽的如意吉祥.送你一个睛空,好让你此生一路顺风.送你一轮圆...
写思念家乡的诗句 写思念家乡的诗句  为了生计我们常常选择背井离乡,而那份思乡之情也悄然而生。身在异地,最牵挂的`是那...
回到唐朝作文 回到唐朝作文  篇一:回到唐朝  虽然我现在生活在多姿多彩的科技时代里,但是我仍然向往繁盛的唐朝,因...
赞叹女子舞姿优美的古诗句 赞叹女子舞姿优美的古诗句  在平凡的学习、工作、生活中,许多人对一些广为流传的.古诗都不陌生吧,古诗...
举杯邀明月,对影成三人诗句出... 举杯邀明月,对影成三人诗句出处及意思  【诗句】举杯邀明月,对影成三人。  【出处】唐·李白《月下独...