尚硅谷--SpringBoot篇
参考文档:https://www.yuque.com/atguigu/springboot/
学习视频:https://www.bilibili.com/video/BV19K4y1L7MT?p=85
代码地址:https://gitee.com/empirefree/SpringBoot-summarize/tree/尚硅谷-SpringBoot基础入门-init/
🔥1. 基础入门
1.1. 基本概念
1.1.1 依赖管理
1. springboot.starter.*:默认是官方规定。以这种开头的依赖默认使用的依赖是spring-boot-starter
1. *.springboot.starter:是第三方开发。
1.1.2 @Configuration注解
1.1.2.1 基本概念
@Configuration本身是个组件,类型与beans.xml
内部@Bean就是注入到spring容器中的组件,方法名作为id,返回类型作为组件class,返回值就是组件实例
1.1.2.2 proxyBeanMethods
@Configuration组件默认是单例,proxyBeanMethods也是如此,保证了组件依赖性即内部函数如果返回方法默认采用Spring-cglib代理单例返回同一个对象
1.1.3 @Import
自定义添加注入的类成为组件:并且采用的类全路径:
com.empirefree.mybatisplus.entity.User
1.1.4 @Conditional
类似于if判断条件,满足存在/不存在某个bean的时候才去加载本类或者本方法
1.1.5 @ImportResource
引用之前的beans.xml配置文件
1.1.5 @ConfigurationProper
1.1.5.1 @Component与@ConfigurationProperties(常见)
获取配置文件属性值
1.1.5.2 @EnableConfigurationProperties
需要先采用@configuration和@EnableConfigurationProperties,然后再使用@ConfigurationProperties标记组件类
1.1.6 @SpringBootApplication
内部分为核心3个
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
1.1.6.1 @SpringBootConfiguration
@Configuration配置类
1.1.6.2 @ComponentScan
指定要扫描的包下注解,利用@EnableAutoConfiguration中@AutoConfiguration中的根目录获取具体位置,然后再进行扫描
1.1.6.3 @EnableAutoConfiguration
1、@AutoConfigurationPackage:获取主程序根目录
内部@AutoConfigurationPackage -> 用@Import -> 批量注册register 组件。即MainApplication主程序下所有组件导入进来
2、@Import(AutoConfigurationImportSelector.class)
1. 利用getAutoConfigurationEntry给容器中批量导入组件
1. 最终按需@Conditional开启自动配置项
1. 采用@ConditionalMissBean默认全部配置好,用户自定义优先。
导入 XXXAutoConfiguration ->从从XXXProperties(和配置文件application.properties绑定)拿默认值-> 以application.properties拿值
🔥2. 核心功能
2.1. Web开发
2.1.1 RestFul开发
2.1.1.1 表单form请求
走springmvc-filter,需要开启filter
# 表单发送请求,为了区分开来,需要手动开启filter
# 视频链接:https://www.bilibili.com/video/BV19K4y1L7MT?p=26&spm_id_from=pageDriver
spring
mvc:
hiddenmethod:
filter:
enabled: true
2.1.1.2 非表单请求
如PostMan请求,不走Filter。
分为:GetMapping, PostMapping, PutMapping, DeleteMapping。
内部底层就是@RequestMapping(value = , method = RequestMethod.XXX)
2.1.2 RequestMapping请求
问:SpringBoot是如何处理外部请求url
答:springboot内部也是有springMvc(底层也是有HttpServlet实现doget, dopost实现)实现
- SpringBoot自动配置欢迎页WelcomePageHandlerMapping用于访问index.html
- springMvc把自定义所有的RequestMapping读入,依次循环判断请求url
- 没有访问到就走index.html
2.1.3 SpringMVC-注解
@PathVariable("username") String name,
@RequestHeader
@RequestParam
@CookieValue
@RequestBody
@RequestAttribute
@MatrixVariable
2.1.4 参数解析器
对于不同类型参数,springMVC加载了所有参数解析器
2.1.5 拦截器
DispatcherServlet.doDispatch遍历所有拦截器拦截请求url,如果某一个preHanler返回false就表明被拦截,然后倒序执行之前拦截器的afterCompletion,若返回true,则执行目标方法,然后倒序执行afterCompletion。页面成功渲染后,若preHandle,postHandler有报错,也会倒序触发已经成功执行了的afterCompletion
如3个拦截器,会依次执行ABC的preHandle
A -> B -> C
若C被拦截了,就会倒序执行B,A的afterCompletion
2.1.6 文件上传-MultipartFile
注解配置在MultipartAutoConfiguration文件,文件属性在MultipartProperties。
视频链接https://www.bilibili.com/video/BV19K4y1L7MT?p=50&spm_id_from=pageDriver
2.1.7 异常解析
2.1.7.1 全局异常@ControllerAdvice
利用@ControllerAdvice + @ExceptionHandler可以控制全局异常处理
2.1.7.2 自定义异常处理HandlerExceptionResolver
可以看到 目前分为了如下几步:
- 获取外部请求入参请求url的mpping与参数解析器
- 对于请求加载所有的拦截器与异常处理这些。
2.1.8 Web注入-Servlet、Filter、Listener
参考链接: https://www.bilibili.com/video/BV19K4y1L7MT?p=56&spm_id_from=pageDriver
@Configuration(proxyBeanMethods = true):内部@Bean都是单实例的,不会在内部调用多次
精度优先原则:关于访问路径,自定义servlet由tomcat处理, / -由spring中dispatcherServlet处理
2.2 数据访问
2.2.1 SQL相关
2.2.1.1 pom内容
1、依赖包查询
org.springframework.boot -> spring-boot-dependencies
2、版本仲裁
有version就近与property就近原则,即父类和本类都有,以本类为主
数据源(HikraiData、Druid)
JDBC ->事务
2.2.2 整合Mybatis、MybatisPlus
1、导入starter:mybatis,mybatis-plus都是如此
2、编写mapper文件:@Mapper,@MapperScan
3、在application.yaml配置文件指定Mapper配置文件位置
MybatisPlus文档地址:https://baomidou.com/pages/226c21/#开始使用(也是需要在application.yml中配入mapper地址。)
2.3 单元测试
2.3.1 基本概念
SpringBoot 2.2.0引入Junit5
参考地址:https://www.yuque.com/atguigu/springboot/ksndgx
2.4 监控指标
2.4.1 基本概念
监控指标:https://www.yuque.com/atguigu/springboot/sgpvgn(但是我没试成功)
2.5 高级特性
2.5.1 环境切换
可以再jar包执行的时候自定义配置文件,也可以更改配置文件内容
2.5.2 自定义starter
1、先加载自己配置的bean,运行@Bean这些方法,再加载dependency,依次来排除@missingBean这些
2、自定义starter:
2.1 判断是否自定义@bean与dependency中bean冲突,若冲突,则已自定义为主
2.2 starter -> autoconfiguration,若要被找到,需要在resource/META-INF下定义spring.factories
2.5.3 SpringBoot原理
前面有了SpringMVC原理,自动配置原理,下面讲springBoot原理
2.5.3.1 创建SpringApplication
--不同版本SpringBoot类型或有差异,但是都差不多。
1、保存一些基本配置信息
2、判断应用类型:响应式或者是Servlet
3、ApplicationContextInitializer, ApplicationListener去spring.factories找
4、找到第一个main主程序
2.5.3.2 运行SpringApplication
参考链接: https://www.bilibili.com/video/BV19K4y1L7MT?p=85
后续:
目前讲解的是SpringBoot核心篇内容,后续还有场景整合,SpringBoot响应式编程
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。