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  小木偶是一个心地善良、正直友爱的孩子,自从蓝鼻子小女巫给了丰富...
听故事大全安徒生童话   提起《安徒生童话》,恐怕世界上没有人不知道了,听故事大全安徒生童话。unjs小编今天就为大家带来...
成长故事 -成长作文 成长故事 -成长作文 成长故事 一寸光阴一寸金,转瞬间,我已在不知不觉中走过了近11个春秋,度过了无...
成语寓言故事文言文 成语寓言故事文言文  有关成语的寓言故事文言文,下面就是小编与大家分享的几篇,我们一起阅读学习吧。 ...
人生经典哲理小故事   打开失败旁边的窗户,也许你就看到了希望。如下是小编给大家整理的人生经典哲理小故事,希望对大家有所...
中国经典历史故事   中国经典历史故事一  1、宗悫(què)乘风破浪  宗悫,字元干,是南阳涅阳人。他的叔父宗炳,学...
童话故事 《驼背的故事》 童话故事 《驼背的故事》  古代,中国的京城中住着一个裁缝,他性情快活,喜好嬉戏,常带着老婆出去散步...
关于诚信的故事50字   诚信是一种自我约束的品质,诚信就像人生航船的楫桨,控制着人生的去向,关于诚信的故事50字。那么,...
心理小故事 心理小故事  心理小故事(精选25篇)  心理是指人类在符号活动梳理的过程和结果。具体是指生物对客观...
关于家训家风小故事   家风是一个家庭的风气,风格与风尚,也就是家规、家训形成的习惯。善、孝、仁、礼等品德,尊老爱幼、勤...
《漂亮的李慧珍》大结局揭秘 《漂亮的李慧珍》大结局揭秘导语:电视剧《漂亮的李慧珍》正在热播,这部是根据韩剧《她很漂亮》改编的由迪...
渴望读书的经典名人故事   让我们一同走进名人的世界吧,读一读这些和读书有关的名人故事。从他们身上,感受读书的美妙。  1、...
埋头的鸵鸟-寓言故事 埋头的鸵鸟-寓言故事  鸵鸟和斑马一起在草原上旅行。  一路上,斑马絮絮叨叨:“我的斑纹可是非常好的...
红楼梦人物关系 -小学生作文...   民国初年兰上星白编了一部《红楼梦人物谱》,共收录721人,人各有传,字数长短不一,此书中又收《红...
真善美的小故事正能量   真善美的小故事正能量怎么写?知识欲的目的是真,道德欲的目的是善,美欲的目的是美。真善美,即人间理...
名人读书故事:名人读书小故事...   马克思   经常有针对性地阅读,名人读书故事:名人读书小故事大全。每逢书中他自认为重要和有参考价...
牧羊姑娘 童话故事 牧羊姑娘 童话故事  很久很久以前,有一个牧羊姑娘,她住在山脚下的木屋里,山脚下是一片绿油油的草原,...
蛙声寓言故事 蛙声寓言故事  仲夏的傍晚,数不清的田蛙在田池里“哇——哇——”地叫个不停,方圆百里一片蛙声。其中一...