扩展与全面接管 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 帮助我们进行扩展配置,遇见了一定要多加注意

相关文章
|
3月前
|
XML 存储 前端开发
手动开发-实现SpringMVC底层机制--小试牛刀
手动开发-实现SpringMVC底层机制--小试牛刀
26 0
|
5月前
|
Java 开发者 Spring
"揭秘SpringBoot魔法SPI机制:一键解锁服务扩展新姿势,让你的应用灵活飞天!"
【8月更文挑战第11天】SPI(Service Provider Interface)是Java的服务提供发现机制,用于运行时动态查找和加载服务实现。SpringBoot在其基础上进行了封装和优化,通过`spring.factories`文件提供更集中的配置方式,便于框架扩展和组件替换。本文通过定义接口`HelloService`及其实现类`HelloServiceImpl`,并在`spring.factories`中配置,结合`SpringFactoriesLoader`加载服务,展示了SpringBoot SPI机制的工作流程和优势。
76 5
|
7月前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
60 3
|
7月前
|
前端开发 Java API
SpringMVC的架构有什么优势?——控制器(三)
SpringMVC的架构有什么优势?——控制器(三)
|
8月前
|
Java Shell 测试技术
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
173 2
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
|
JSON Java 应用服务中间件
自己实现SpringMVC 底层机制[四]
自己实现SpringMVC 底层机制[四]
55 0
|
8月前
|
XML 缓存 Dubbo
Dubbo的魔法之门:深入解析SPI扩展机制【八】
Dubbo的魔法之门:深入解析SPI扩展机制【八】
97 0
|
XML Java 应用服务中间件
自己实现SpringMVC 底层机制[一]
自己实现SpringMVC 底层机制[一]
90 1
|
Java 应用服务中间件 容器
自己实现SpringMVC 底层机制[二]
自己实现SpringMVC 底层机制[二]
71 0
|
前端开发 Java 应用服务中间件
自己实现SpringMVC 底层机制[三]
自己实现SpringMVC 底层机制[三]
47 0