扩展与全面接管 SpringMVC|学习笔记

简介: 快速学习扩展与全面接管 SpringMVC

开发者学堂课程【SpringBoot快速掌握 - 核心技术扩展与全面接管 SpringMVC】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9245


扩展与全面接管 SpringMVC

内容介绍

一、 扩展 SpringMVC

二、 全面接管 SpringMVC

 

一、扩展 SpringMVC

如果您想保持 SpringBootMVC 特性,并且只想添加额外的 MVC 配置

(拦截器、格式化器、视图控制器等)您可以添加您自己的类型的

@Configuration类

Webl/vcConfigurerAdapter,但没有@EnableWeblvc 。如果您希望提供 RequestMappingHandlerMapping,

RequestMappingHandlerAdapter 或除了离子处理异常解决您

可以声明提供此类组件的 WebMvcRegistrationsAdapter 实例。

如果您想完全控制 SpringMVC ,可以添加您自己的 @Configuration

@EnableWebMvc .

首先在 XML 文件中配置:

<mvc:view-controller path="/hello" view-name ="success"/>

<mvc:interceptors>

<mvc :interceptor>

<mve:mapping path=" /hello"1>

<bean></bean>

</mvc:interceptor>

</mvc : interceptors >

编写一个配置类 (@Configuration ),是 WebMvcConfigurerAdapter 类型;不能标注 

@EnableWebMvc,并且有 @Configuration 才能称为配置类

既保留了所有的自动配置,也能用我们扩展的配置;

新建一个配置类:

//使用webtvcConfigurerAdapter可以来扩展Sprinmvc的功能

@Configuration

public class MyMrcConfig extends webMvcConfigurerAdapter {

@override

public void addViewControllers(ViewControllerRegistry registry){

//super.addviewControllers(registry) ;

//浏览器发送/atguigu 请求来到success

//设置一个视图映射规则,把什么请求映射到什么页面

registry.addviewController("/atguigu").setviewName( "success");

}

}

这些接口都在 spring boot  的配置里面,要做什么功能就在里面进行配置

Ctrl+o 进行方法重写

然后启动进行测试:访问 localhost:8080/aiguigu

返回成功!!

代表扩展 spring MVC 成功

原理:

1、WebMvcAutoConfiguration   SpringMVC 的自动配置类

2、在做其他自动配置时会导入; @import(EnableWebMvcConfiguration.class)

@Configuration

//继承了DelegatingWebMvcConfiguration,重要的是继承的父类

public static Class EnableWebMvCConf iguration extends Deleg atingWebMvcConfiguration {

private final WebMvCConf igurercomposite configurers = new WebrMvcConfigurerComposite();

//自动装配,从容器中获取所有的WebMvcConfi gurer

@Autowired(required = false)

public void setConfigurers(List  configurers) {

if (CollectionUtils ,isEmpty(configurers)) {

this. configurers . addwWebMvcConfigurers(configurers);

//一个参考实现;将所有的WebMcConfigurer相关配置都来一起调用;

@override

public void addViewControllers(ViewControllerRegistry registry) {

for (WebMvcConfigurer delegate : this.delegates) {

delegate. addViewControllers(registry);

//拿到所有的WebMvcConfigurer并都配置一遍

}

}

}

}

3、容器中所有的 WebMcConfigurer 都会一起起作用 ;

4、我们的配置类也会被调用;

实现效果:  SpringMVC 的自动配置和我们的扩展配置都会起作用;

如果您想完全控制 SpringMVC ,可以添加您自己的@Configuration

@EnableWebMvc .

 

二、全面接管 SpringMVC

SpringBoot  SpringMVC 的自动配置不需要了,所有都是我们自己配置;所有的  SpringMVC 的自动配置都失效了

我们需要在配置类中添加  @EnableWebMvc  即可;

//使用  WebMvcConfigurerAdapter  可以来扩展  SpringMVC的功能

@EnablewebMvc

@Configuration

public class MyMcConfig extends WebMvCConf igurerAdapter {

@Override

public void addViewControllers(ViemControllerRegistry registry) {

//super. addViewControllers(registry);

//浏览器发送/atguigu请求来到success

registry. addViewController(" /atguigu") .

setViewName("success");

}

}

重新启动,全面接管后,静态映射失效,其他默认配置都失效了

启动后控制台也没有打印默认配置

 @EnablewebMvc  注释掉,重启默认配置就会重新生效

并且在浏览器中测试,其他默认配置都失效了

在日常中不推荐使用全面接管,因为我们都需要用到很多功能,全面接管需要自己配置

原理:

为什么  @EnableWebMvc  自动配置就失效了;

1  @EnableWebMvc的核心

@Import(DelegatingWebNvcConfiguration. class)

public @interface EnableWebMvc {

配置自动失效;

@Configuration

public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {

private final WebMvcConfigurerComposite configurers = new WebMvcConf igurerComposite();

@Autowired(required = false)

public void setConfigurers(List  configurers) {

if (!CollectionUtils. isEmpty( configurers)) {

this . configurers . addWebMvcConfigurers(configurers);

}

}

2、

@Configuration

public class DelegatingWebMvcConfiguration extends WebMcConfigurat ionsupport {

3、自动配置类签名

@Configuration

@Condit ionalOnWebApplication

@ConditionalOnClass({ Servlet.class,DispatcherServlet.class

WebMvcConfigurerAdapter.class })

//容器中没有这个组件的时候,这个自动配置类才生效

@ConditionalOnMissingBean(WebMvcConfigur ati onSupport .class)

@AutoConfi gureOrder( 0rdered .HIGHEST PRECEDENCE + 10)

@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class,ValidationAutoConfiguration.class })

public class WebMVCAutoConf iguration {

4、@EnableWebMvC将WebMvcConfigurationSupport组件导入进来 ;所以说自动配置失效了,全部将由自己配置

5、导入的 WebMvcConfigurationSupport 只是 SpringMVC 最基本的功能;

注意:、在 SpringBoot 中会有 非常多的 xxxConfigurer 帮助我们进行扩展配置,遇见了一定要多加注意

相关文章
|
6月前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
49 3
|
6月前
|
XML 负载均衡 Java
Spring Boot 中实现负载均衡:概念、功能与实现
【6月更文挑战第28天】在分布式系统中,负载均衡(Load Balancing)是指将工作负载和流量分配到多个服务器或服务实例上,以提高系统可用性和响应速度。负载均衡器可以是硬件设备,也可以是软件解决方案。
291 0
|
7月前
|
设计模式 前端开发 开发者
SpringMVC底层负责请求路由的模块是什么
SpringMVC底层负责请求路由的模块是什么
112 0
|
7月前
|
前端开发 Java 数据库连接
Spring 框架模块深度解析:核心容器、数据访问、Web 层与其他关键模块
Spring 可能成为您的所有企业应用程序的一站式商店。但是,Spring 是模块化的,允许您挑选适用于您的模块,而无需引入其他模块。下面的部分提供了 Spring Framework 中所有可用模块的详细信息。Spring Framework 提供了大约20个模块,可以根据应用程序要求使用。
110 0
|
设计模式 XML JSON
springMVC 工作原理和流程
springMVC 工作原理和流程
103 0
springMVC 工作原理和流程
|
小程序 Java 应用服务中间件
动态 WEB 开发核心-Servlet详细分析
动态 WEB 开发核心-Servlet详细分析
56 0
|
前端开发 安全 Java
集中式整合之编写SpringSecurity配置类|学习笔记
快速学习集中式整合之编写SpringSecurity配置类
集中式整合之编写SpringSecurity配置类|学习笔记
|
设计模式 缓存 前端开发
SpringMVC的工作原理与核心开发步骤
SpringMVC核心开发步骤 3.1 DispatcherServlet在web.xml中的部署描述,从而拦截请求到springMVC 3.2 HandlerMapping的配置,从而将请求映射到处理器 @RequestMapping() 3.3 HandlerAdapter的配置,从而支持多种类型的处理器 3.4 处理器(页面控制器)的配置,从而进行功能处理 @Controller 3.5 ViewResolver的配置,从而将逻辑视图名解析为具体的视图技术
|
XML 敏捷开发 应用服务中间件
WEB核心【Servlet配置和注解重构用户登录】第八章
本篇章主要讲Servlet,两个重点:Servlet路径配置,Servlet注解开发,了解内容Servlet继承数及生命周期,Servlet路径配置,ServletConfig配置
WEB核心【Servlet配置和注解重构用户登录】第八章
|
JSON Java 数据库
SpringBoot2.x基础篇:灵活的使用外部化配置信息
`SpringBoot`提供了内部配置`application.yml`文件的方式来进行全局配置,还支持使用`profiles`来激活不同环境下使用不同的配置文件,而这种方式毕竟是已经打包完成了,因此存在一定的局限性,像数据库特殊敏感配置也可能存在泄露的风险,如何解决这种问题呢?我们来看看本章要讲到的外部配置的方式吧!!!