尚硅谷--SpringBoot篇

参考文档:https://www.yuque.com/atguigu/springboot/

学习视频:https://www.bilibili.com/video/BV19K4y1L7MT?p=85

代码地址:https://gitee.com/empirefree/SpringBoot-summarize/tree/%E5%B0%9A%E7%A1%85%E8%B0%B7-SpringBoot%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-init/

csdn csdn csdn csdn csdn


🔥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实现)实现

  1. SpringBoot自动配置欢迎页WelcomePageHandlerMapping用于访问index.html
  2. springMvc把自定义所有的RequestMapping读入,依次循环判断请求url
  3. 没有访问到就走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

image-20220410115729046

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

可以看到 目前分为了如下几步:

  1. 获取外部请求入参请求url的mpping与参数解析器
  2. 对于请求加载所有的拦截器与异常处理这些。
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/#%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8(也是需要在application.yml中配入mapper地址。)

2.3 单元测试
2.3.1 基本概念

SpringBoot 2.2.0引入Junit5

img

参考地址: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

image-20220520162932945

--不同版本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响应式编程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
00、尚硅谷_SpringBoot_源码、课件 01、尚硅谷_SpringBoot_入门-课程简介 02、尚硅谷_SpringBoot_入门-Spring Boot简介 03、尚硅谷_SpringBoot_入门-微服务简介 04、尚硅谷_SpringBoot_入门-环境准备 05、尚硅谷_SpringBoot_入门-springboot-helloworld 06、尚硅谷_SpringBoot_入门-HelloWorld细节-场景启动器(starter) 07、尚硅谷_SpringBoot_入门-HelloWorld细节-自动配置 08、尚硅谷_SpringBoot_入门-使用向导快速创建Spring Boot应用 09、尚硅谷_SpringBoot_配置-yaml简介 10、尚硅谷_SpringBoot_配置-yaml语法 11、尚硅谷_SpringBoot_配置-yaml配置文件值获取 12、尚硅谷_SpringBoot_配置-properties配置文件编码问题 13、尚硅谷_SpringBoot_配置-@ConfigurationProperties与@Value区别 14、尚硅谷_SpringBoot_配置-@PropertySource、@ImportResource、@Bean 15、尚硅谷_SpringBoot_配置-配置文件占位符 16、尚硅谷_SpringBoot_配置-Profile多环境支持 17、尚硅谷_SpringBoot_配置-配置文件的加载位置 18、尚硅谷_SpringBoot_配置-外部配置加载顺序 19、尚硅谷_SpringBoot_配置-自动配置原理 20、尚硅谷_SpringBoot_配置-@Conditional&自动配置报告 21、尚硅谷_SpringBoot_日志-日志框架分类和选择 22、尚硅谷_SpringBoot_日志-slf4j使用原理 23、尚硅谷_SpringBoot_日志-其他日志框架统一转换为slf4j 24、尚硅谷_SpringBoot_日志-SpringBoot日志关系 25、尚硅谷_SpringBoot_日志-SpringBoot默认配置 26、尚硅谷_SpringBoot_日志-指定日志文件和日志Profile功能 27、尚硅谷_SpringBoot_日志-切换日志框架 28、尚硅谷_SpringBoot_web开发-简介 29、尚硅谷_SpringBoot_web开发-webjars&静态资源映射规则 30、尚硅谷_SpringBoot_web开发-引入thymeleaf 31、尚硅谷_SpringBoot_web开发-thymeleaf语法 32、尚硅谷_SpringBoot_web开发-SpringMVC自动配置原理 33、尚硅谷_SpringBoot_web开发-扩展与全面接管SpringMVC 34、尚硅谷_SpringBoot_web开发-【实验】-引入资源 35、尚硅谷_SpringBoot_web开发-【实验】-国际化 36、尚硅谷_SpringBoot_web开发-【实验】-登陆&拦截器 37、尚硅谷_SpringBoot_web开发-【实验】-Restful实验要求 38、尚硅谷_SpringBoot_web开发-【实验】-员工列表-公共页抽取 39、尚硅谷_SpringBoot_web开发-【实验】-员工列表-链接高亮&列表完成 40、尚硅谷_SpringBoot_web开发-【实验】-员工添加-来到添加页面 41、尚硅谷_SpringBoot_web开发-【实验】-员工添加-添加完成 42、尚硅谷_SpringBoot_web开发-【实验】-员工修改-重用页面&修改完成 43、尚硅谷_SpringBoot_web开发-【实验】-员工删除-删除完成 44、尚硅谷_SpringBoot_web开发-错误处理原理&定制错误页面 45、尚硅谷_SpringBoot_web开发-定制错误数据 46、尚硅谷_SpringBoot_web开发-嵌入式Servlet容器配置修改 47、尚硅谷_SpringBoot_web开发-注册servlet三大组件 48、尚硅谷_SpringBoot_web开发-切换其他嵌入式Servlet容器 49、尚硅谷_SpringBoot_web开发-嵌入式Servlet容器自动配置原理 50、尚硅谷_SpringBoot_web开发-嵌入式Servlet容器启动原理 51、尚硅谷_SpringBoot_web开发-使用外部Servlet容器&JSP;支持 52、尚硅谷_SpringBoot_web开发-外部Servlet容器启动SpringBoot应用原理 53、尚硅谷_SpringBoot_Docker-简介 54、尚硅谷_SpringBoot_Docker-核心概念 55、尚硅谷_SpringBoot_Docker-linux环境准备 56、尚硅谷_SpringBoot_Docker-docker安装&启动&停止 57、尚硅谷_SpringBoot_Docker-docker镜像操作常用命令 58、尚硅谷_SpringBoot_Docker-docker容器操作常用命令 59、尚硅谷_SpringBoot_Docker-docker安装MySQL 60、尚硅谷_SpringBoot_数据访问-简介 61、尚硅谷_SpringBoot_数据访问-JDBC&自动配置原理 62、尚硅谷_SpringBoot_数据访问-整合Druid&配置数据源监控 63、尚硅谷_SpringBoot_数据访问-整合MyBatis(一)-基础环境搭建 64、尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-注解版MyBatis 65、尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-配置版MyBatis 66、尚硅谷_SpringBoot_数据访问-SpringData JPA简介 67、尚硅谷_SpringBoot_数据访问-整合JPA 68、尚硅谷_SpringBoot_原理-第一步:创建SpringApplication 69、尚硅谷_SpringBoot_原理-第二步:启动应用 70、尚硅谷_SpringBoot_原理-事件监听机制相关测试 71、尚硅谷_SpringBoot_原理-自定义starter 72、尚硅谷_SpringBoot_结束语
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福宇乔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值