【Java面试】七、SpringMvc的执行流程、SpringBoot自动装配原理

文章目录

1、SpringMVC的执行流程

1.1 视图阶段

旧项目中,未前后端分离时,用到JSP,相关流程为:

  • 浏览器发出请求
java 复制代码
http://localhost:8080/user/getById/1
  • 请求达到前端控制器DispatcherServlet,它相当于一个调度中心,会加载处理器映射器、处理器适配器、视图解析器。DispatcherServlet被Tomcat容器初始化,所有的请求先经过它。
  • DispatcherServlet向处理器映射器去查询handler,即查询这个接口该调哪个Controller的哪个方法。处理器映射器里以key-value形式存了接口路径合类名+方法名
  • 查询到handler后,映射器返回给控制器一个处理器执行链HandlerExecutionChain,注意不仅仅是返回一个接口对应的类名 + 方法名,如果接口涉及拦截器,拦截器也会被封装到处理器执行链对象中
  • 控制器通过适配器HandlerAdaptor,调用handler并执行,且这里适配器还负责处理了参数绑定和返回值处理。最终返回一个ModelAndView给前端控制器
  • 前端控制器请求视图解析器ViewResolver,最终得到一个View对象(逻辑视图转为真正的视图)
  • 前端控制器渲染视图,返回给浏览器一个有数据的页面

流程总结:

1.2 前后端分离阶段

不再返回一个ModelAndView,而是返回一个Json给前端(将最终结果通过HttpMessageConvert转换器转为Json):

流程总结:

2、SpringBoot自动配置原理

从SpringBoot启动类的注解可以看到,其源码有三个注解:

  • @SpringBootConfguration:与 @Configuration 注解作用相同,用来声明当前也是一个配置类
  • @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包
  • @EnableAutoConfiquration

@EnableAutoConfiquration则是SpringBoot 实现自动化配置的核心注解,继续往下跟:

@Import注解,导入一个Bean到Spring容器。这里导入一个Selector,用来加载类路径下的spring.factories中定义的自动配置类,并将这些自动加载为配置Bean

spring.factories中已经定义好了很多自动配置类,大概有一百多个,但这一百多个不是都要加载到IoC容器中。以spring.factories中的RedisAutoConfiguration这个自动配置类为例,这里有两个关键注解,一个是@ConditionalOnClass,即有RedisOperation类的字节码时,创建这个RedisAutoConfig自动配置类的Bean,如此,只有你引入了Redis-starter时,就会加载RedisAutoConfig这个Bean。 此外,下面用@Bean创建RedisTemplate这个客户端操作类Bean的条件是,环境中没有叫redisTemplate的Bean,即开发者没有自己定义这个Bean时,框架给你创建并维护个redisTemplate的Bean

总结:

3、框架常用的注解

3.1 Spring的注解

Spring框架(亮点:IoC、Bean)的注解:

3.2 SpringMvc的注解

SpringMvc框架(亮点:web请求处理)的注解:

3.3 SpringBoot的注解

SpringBoot框架(亮点:快速起步、自动配置)的注解:

再加一个@SpringBootApplication

4、面试




相关推荐
秋千码途2 小时前
小架构step系列08:logback.xml的配置
xml·java·logback
飞翔的佩奇2 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
时来天地皆同力.2 小时前
Java面试基础:概念
java·开发语言·jvm
找不到、了3 小时前
Spring的Bean原型模式下的使用
java·spring·原型模式
阿华的代码王国3 小时前
【Android】搭配安卓环境及设备连接
android·java
YuTaoShao3 小时前
【LeetCode 热题 100】141. 环形链表——快慢指针
java·算法·leetcode·链表
铲子Zzz4 小时前
Java使用接口AES进行加密+微信小程序接收解密
java·开发语言·微信小程序
霖檬ing4 小时前
K8s——配置管理(1)
java·贪心算法·kubernetes
zhuiQiuMX4 小时前
字节面试手撕中等题但还没做出来
面试
Vic101015 小时前
Java 开发笔记:多线程查询逻辑的抽象与优化
java·服务器·笔记