分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

008 WEBmvc的自动配置

发布时间:2023-09-06 02:16责任编辑:彭小芳关键词:配置

一 .概述

  在springboot之中开发一个web项目是十分的简单的,我们本节就看一下springboot之中mvc的自动配置原理,这样可以帮助我们在后面覆盖springboot的默认的配置信息.


二 .springboot的mvc自动配置

 下面就是springboot的webMVC的自动配置类,我们首先分析一下主要的结构问题. 

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

[1]是一个配置类

[2]需要在web环境下生效

[3]在类路径下需要有Servlet.class,DispatcherServlet.class,WebMvcConfigurerAdapter.class

[4]在容器之中没有WebMvcConfigurationSupport的bean

[5]本类是在DispatcherServletAutoConfiguration和ValidationAutoConfiguration自动配置之后进行的.

 ???@Bean ???@ConditionalOnMissingBean(HiddenHttpMethodFilter.class) ???public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() { ???????return new OrderedHiddenHttpMethodFilter(); ???}

首先,我们看到,springboot为我们提哦给你了一个Rest过滤器,这个比较简单.

  @Configuration ???@Import(EnableWebMvcConfiguration.class) ???@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class }) ???public static class WebMvcAutoConfigurationAdapter extends WebMvcConfigurerAdapter {

这个就是mvc部分的核心配置了.

首先我们发现就是给我们添加了一个EnableWebMvcConfiguration配置类,然后帮助我们映射了WebMvcProperties和ResourceProperties的属性配置对象.

通过这里,我们就知道了mvc的配置主要集中在WebMvcProperties这个属性的配置之中.

下面我们看看具体的配置: 

@Bean ???????@ConditionalOnMissingBean ???????public InternalResourceViewResolver defaultViewResolver() { ???????????InternalResourceViewResolver resolver = new InternalResourceViewResolver(); ???????????resolver.setPrefix(this.mvcProperties.getView().getPrefix()); ???????????resolver.setSuffix(this.mvcProperties.getView().getSuffix()); ???????????return resolver; ???????} ???????@Bean ???????@ConditionalOnBean(View.class) ???????@ConditionalOnMissingBean ???????public BeanNameViewResolver beanNameViewResolver() { ???????????BeanNameViewResolver resolver = new BeanNameViewResolver(); ???????????resolver.setOrder(Ordered.LOWEST_PRECEDENCE - 10); ???????????return resolver; ???????} ???????@Bean ???????@ConditionalOnBean(ViewResolver.class) ???????@ConditionalOnMissingBean(name = "viewResolver", value = ContentNegotiatingViewResolver.class) ???????public ContentNegotiatingViewResolver viewResolver(BeanFactory beanFactory) { ???????????ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); ???????????resolver.setContentNegotiationManager( ???????????????????beanFactory.getBean(ContentNegotiationManager.class)); ???????????// ContentNegotiatingViewResolver uses all the other view resolvers to locate ???????????// a view so it should have a high precedence ???????????resolver.setOrder(Ordered.HIGHEST_PRECEDENCE); ???????????return resolver; ???????}

在上面,我们可以看到springboot为我们提供了三个视图解析器.

@Bean ???????@ConditionalOnProperty(prefix = "spring.mvc", name = "date-format") ???????public Formatter<Date> dateFormatter() { ???????????return new DateFormatter(this.mvcProperties.getDateFormat()); ???????}

为我们提供了一个日期格式化的格式化器,可以通过spring.mvc.data-formar进行配置.

@Bean ???????public WelcomePageHandlerMapping welcomePageHandlerMapping( ???????????????ResourceProperties resourceProperties) { ???????????return new WelcomePageHandlerMapping(resourceProperties.getWelcomePage(), ???????????????????this.mvcProperties.getStaticPathPattern()); ???????}

为我们配置了一个欢迎页的处理器映射器.我们发现就是默认的index.html页面.

@Configuration ???????@ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true) ???????public static class FaviconConfiguration {

为我们提供了一个/favicon.ico的网站图标的映射.

等等,这些都是springboot为我们提供的.

我们最终发现实际上就是帮助我们配置了一个WebMvcConfigurer的bean.


三 .WebMvcConfigurer的作用

  在springboot之中,使用了WebMvcConfigurer帮助我们覆盖我们的默认配置.

  我们可以向容器之中添加一个WebMvcConfigurer组件,这样springboot会将默认的配置和我们的配置进行组合,然后成为springboot最终的配置.

  由于WebMvcConfigurer是一个接口,因此我们常常添加的是一个WebMvcConfigurer的适配器类WebMvcConfigurerAdapter.

public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {   ???@Override ???public void configurePathMatch(PathMatchConfigurer configurer) { ???} ???@Override ???public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { ???}  // 配置异步支持 ???@Override ???public void configureAsyncSupport(AsyncSupportConfigurer configurer) { ???}  // 配置默认的路径映射 ???@Override ???public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { ???}   // 可以添加一些formatter ???@Override ???public void addFormatters(FormatterRegistry registry) { ???}  //可以添加一些拦截器 ???@Override ???public void addInterceptors(InterceptorRegistry registry) { ???}  // 可以添加一些资源处理器 ???@Override ???public void addResourceHandlers(ResourceHandlerRegistry registry) { ???} ??//可以添加一些跨域映射 ???@Override ???public void addCorsMappings(CorsRegistry registry) { ???}   // 添加视图控制器 ???@Override ???public void addViewControllers(ViewControllerRegistry registry) { ???} ?  //配置视图解析器 ???@Override ???public void configureViewResolvers(ViewResolverRegistry registry) { ???}   ???@Override ???public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { ???} ?????@Override ???public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) { ???} ??//添加消息转换器 ???@Override ???public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { ???} ?????@Override ???public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { ???} ????@Override ???public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) { ???}  //添加异常处理器 ???@Override ???public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) { ???} ??//添加校验器 ???@Override ???public Validator getValidator() { ???????return null; ???} ???@Override ???public MessageCodesResolver getMessageCodesResolver() { ???????return null; ???}}

四 .mvc的自定义配置

  [1]现在我们知道了mvc的自定义的配置方法,就是向容器之中加入一个bean,然后springboot在配置的时候就会加入我们的配置.

  [2]使用WebMvcConfigurer来统一的进行配置.

008 WEBmvc的自动配置

原文地址:https://www.cnblogs.com/trekxu/p/9739727.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved