SpringBoot——MVC自动配置原理《课时十三》

简介: SpringBoot——MVC自动配置原理《课时十三》

SpringBoot中SpringMvc自动配置原理:深入源码的理解

第一部分:案例解析

全面扩展 SpringMvc结论:

扩展SpringMvc 的学习 SpringMvc配置原理

如果想自定义自定义的功能 只需要写组件 交给SpringBoot 自动装备的原理

如果想要将SpringMvc 要扩展

@EnableWebMvc

public interface ViewResolver { 视图解析器的类吧他看做视图解析器

扩展SpringMvc

@EnableWebMvc  导入了一个类  所以得出结论:

所有的WebMvcConfiguration都会被作用,不止Spring自己的配置类,我们自己的配置类当然也会被调用:

第一步 自己定义一个类: MyMvcConfig 接上  WebMvcConfigurer

public class MyMvcConfig implements WebMvcConfigurer {}

第二步:自己定义一个静态内部类  ViewResolver  自定义一个视图显示器

public  static  class MyViewResolver implements ViewResolver{}

第三步:自定义一个视图显示器

public  static  class MyViewResolver implements ViewResolver{
        //自定义一个视图显示器
        @Bean
        //放入bean中
        public  ViewResolver myViewResolver(){
            return new MyViewResolver();
        }
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }

第四步:视图跳转的解析器

@Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/kunghu").setViewName("test");
    }

第五步:控制层的控制器

package com.spring.springboot0907web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Arrays;
//在templates下的只能controller
//需要模板引擎 thymeleof
@Controller
public class IndexController {
    @RequestMapping("/test")
    public String index(Model model){
        model.addAttribute("msg","<h2>Hellow Mode SpringBoot</h2>");
        model.addAttribute("msg","<h1>Hellow Mode SpringBoot</h1>");
        model.addAttribute("users", Arrays.asList("小明","小王","消费"));
        model.addAttribute("dogs",Arrays.asList("效果","小明","王大陆","王晓蓉"));
        return "test";
    }
}
package com.spring.springboot0907web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//深入源码
@SpringBootApplication
public class Springboot0907WebApplication {
    public static void main(String[] args) {
        //调用  SpringApplication.run 来启用
        SpringApplication.run(Springboot0907WebApplication.class, args);
    }
}

运行结果分析

第二部分:@EnableWebMvc源码解读

按住ctrl键点击进去

低昂就进入上面的类

public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
    private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite();
    public DelegatingWebMvcConfiguration() {
    }
}
 @Autowired(
        required = false
    )
    public void setConfigurers(List<WebMvcConfigurer> configurers) {
//从容器中获取所有的webmvcConfigurer
        if (!CollectionUtils.isEmpty(configurers)) {
            this.configurers.addWebMvcConfigurers(configurers);
        }
    }

在项目中找到WebMvcAutoConfiguration

@AutoConfiguration(
    after = {DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class}
)
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
public class WebMvcAutoConfiguration {
    public static final String DEFAULT_PREFIX = "";
    public static final String DEFAULT_SUFFIX = "";
    public static final PathPatternParser pathPatternParser = new PathPatternParser();
    private static final String SERVLET_LOCATION = "/";
    public WebMvcAutoConfiguration() {
    }
}
 @Configuration(
        proxyBeanMethods = false
    )
    @Import({WebMvcAutoConfiguration.EnableWebMvcConfiguration.class})
    @EnableConfigurationProperties({WebMvcProperties.class, WebProperties.class})
    @Order(0)
    public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {
        private static final Log logger = LogFactory.getLog(WebMvcConfigurer.class);
        private final Resources resourceProperties;
        private final WebMvcProperties mvcProperties;
        private final ListableBeanFactory beanFactory;
        private final ObjectProvider<HttpMessageConverters> messageConvertersProvider;
        private final ObjectProvider<DispatcherServletPath> dispatcherServletPath;
        private final ObjectProvider<ServletRegistrationBean<?>> servletRegistrations;
        private final WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer resourceHandlerRegistrationCustomizer;
        private ServletContext servletContext;

https://blog.csdn.net/qq_56248592/article/details/127142599?spm=1001.2014.3001.5501

相关文章
|
7天前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
10 0
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
|
9天前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
20 1
|
22天前
|
监控 NoSQL Java
Spring Boot Actuator 使用和常用配置
Spring Boot Actuator 使用和常用配置
36 5
|
19天前
|
缓存 负载均衡 Java
SpringBoot 与 Nginx 配置优化:性能拉满的关键学习方法
【8月更文挑战第1天】在现代Web开发领域,SpringBoot以其快速启动、简化配置的特性成为众多开发者的首选框架,而Nginx则以其高性能的HTTP和反向代理服务器功能著称。将两者结合,并通过精细的配置优化,可以显著提升Web应用的性能与稳定性。以下是为您学生定制的SpringBoot与Nginx配置优化的学习方法与研究路径。
36 1
|
22天前
|
前端开发 Java API
Spring Boot 中的 MVC 支持
### Spring Boot 注解摘要 - **@RestController** - **@RequestMapping** - **@PathVariable** - **@RequestParam** - **@RequestBody**
21 2
|
7天前
|
前端开发 Java Spring
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
18 0
|
8天前
|
Java
SpringBoot 配置多数据源
SpringBoot 配置多数据源
14 0
|
8天前
|
监控 Java Spring
Spring Boot Admin 配置应用
Spring Boot Admin 配置应用
18 0
|
8天前
|
Java
SpringBoot 配置 Swagger
SpringBoot 配置 Swagger
15 0
|
22天前
|
JSON 前端开发 Java
Spring Boot中的MVC支持
本节课主要讲解了 Spring Boot 中对 MVC 的支持,分析了 @RestController、 @RequestMapping、@PathVariable、 @RequestParam 和 @RequestBody 四个注解的使用方式,由于 @RestController 中集成了 @ResponseBody 所以对返回 json 的注解不再赘述。以上四个注解是使用频率很高的注解,在所有的实际项目中基本都会遇到,要熟练掌握。