SpringBoot知识点总结

本文全面介绍了SpringBoot的基本概念、核心思想及应用场景,包括约定大于配置的原则、依赖管理与版本控制、RESTful风格API的设计、自动化配置与starter模块的使用,以及集成测试、定时任务等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

SpringBoot的主要目的在于简化Spring应用程序的开发,提供了一个引导类SpringBootApplication.run(配置类名.calss)作为程序的启动入口。

核心思想

1.约定大于配置
2.将配置文件抽象成配置类

注意:

<dependencyManagement>中定义的jar包并不是直接加载到工程中,而是进行依赖的定义

restful风格

@RestController:配置bean+告诉spring框架不进行视图跳转,返回响应体,相当于@Controller+@ResponseBody

url + 请求方式 

优点:

1.隐藏请求方式

2.简化书写

参数来源于变量路径

不是?id = 1 ; 使用/1及可

@ResponseBody; 可以放在类上,类上所有方法都是返回json

简化@GetMapping等

restful风格的实际应用

get请求通常用于获取数据

其它一般使用post

put和delete一般情况下并不常用,put请求在进行更新时,需要传递完整的更新信息,前端需要额外处理更多的数据,delelte请求有两大特点,一是请求不安全,浏览器或者防火墙会对delete请求进行严格限制,前端在使用delete请求时往往受到种种限制,delet请求的可塑性差,一旦成功,资源就被彻底删除了

  

parent(减少依赖冲突)

建议进入看看

SpringBoot优化了导入一组技术(技术的依赖不同,需要调包)的过程

dependencyManagement properties 

坐标管理 +  属性管理(版本管理),写依赖不用版本号的原因(xxx.verison也不用写,parent中替写了) ,不同SpringBoot的版本号最大的区别是内部jar包版本不一样

注意:只是定义了,并未引入

Springio中 parent继承了dependencies

aliyun 直接引用了dependencies,没有parent

依赖传递

补充:

调包:mybatis中的日志用1.3,junit中用的日志1.1,出现依赖冲突

starter定义的jar版本也来源于此

starter(减少依赖配置)

一个starter,包含一组jar包,一个技术需要的其它jar,也在此,减少依赖配置

关于starter的两种命名格式

Spring本身

第三方技术

内嵌tomcat

 

 

引导类

代码添加.var,查看返回值,表示开启Spring容器

@SpringBootApplicationContext

嵌套注解扫描包,排除过滤器规则

默认扫描的当前类所在的包及其子包

新增注解

@SpringBootApplication

@ControllerAdive 对所有的Controller进行相互的增强

模板复制

找到要复制pom中artifacid更换项目名(更该后再刷新),删除name 和描述

配置文件

 yml

解决properties中配置过长痛点

优先级:多个类型的配置文件,会共纯,优先级:properties>yml > yaml

技术引用后才能在此配置 ,也就是会在此处有提示

yml中没有属性提示的解决办法:

将yml文件转为配置文件

p20

 

 

 数值前加空格和冒号

yml数据读取方式

一级加点即可

用到数组别加大括号 

 SpringBoot集成junit

添加@SpringBootTest注解即可

用法

如测试类不和引导类在同一个包及其子包时,会报错解决方法

添`

 原理:

Spirng中的进行单元测试方法

 

 当出现此问题时,添加相关依赖即可

dependency>
            <!-- this is needed or IntelliJ gives junit.jar or junit-platform-launcher:1.3.2 not found errors -->
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <scope>test</scope>
        </dependency>

JSON格式

 对象、数组

表现层数据一致性处理 

整合总结

spring.factories机制

SpringBoot自动扫描包时,只会扫描自己模块下的类。可以使用spring.factories机制加载其它模块下的bean

Spring整合Redis

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!-- redis依赖commons-pool 这个依赖一定要添加 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>

 在SpringBoot的配置文件中进行相关配置,在需要用到的地方注入RedisTemplate对象,根据其不同的方法,可以操作不同的数据类型

,操作redis客户端代码

特别补充

@Responsitory和@Mapper

@Responsitory只是用来做标识,还需要在配置文件中配置包扫描

@Mapper通常在搭配了Mybatis-plus的场景下使用,作用:将接口生成的代理类注入到Spring容器中去

@ComponentScan

作用:替换SpringBoot中默认的包扫描路径需依赖注入的类在其它模块时使用。注意所有模块中的@Mapper注解可能会失效,需在启动中使用@MapperScan进行包扫描。

父模块依赖引入问题

父模块中注入的依赖,会在所有的子模块中继承,A为父,B、C为子模块,A中依赖BC后,B可以依赖注入C,依赖相当于将被引入的模块作为自身的一部分

父pom之中,打包方式要设置为pom,在内部添加moudle属性,子pom会继承父pom中设置的属性,内部添加<parent>即可

定时任务

@Scheduled注解使用后,注意启动类中是否添加有@EnableScheduling

mapper文件的载入

加载与mapper接口同名的xml文件

Aop相关

简单来说,@ControllerAdvice 用于构建返回视图的响应结果,而 @RestControllerAdvice 用于构建返回 JSON/XML 等数据格式的响应结果,用于构建 Web 服务。

需要注意的是,使用 @RestControllerAdvice 需要确保在应用程序中使用了 Spring MVC 的注解,例如 @RestController,@GetMapping 等。如果应用程序中只使用了 Spring Boot 的注解,例如 @SpringBootApplication,那么使用 @RestControllerAdvice 将没有任何效果。

最后需要提醒的是,如果应用程序中同时使用了 @ControllerAdvice 和 @RestControllerAdvice,那么 @ControllerAdvice 的处理器将优先于 @RestControllerAdvice 的处理器。

Proceedingjoinpoint 继承了 JoinPoint。是在JoinPoint的基础上暴露出 proceed 这个方法。proceed很重要,这个是aop代理链执行的方法。

@Data

@Data注解的作用的作用是用来生成 get/set  无参构造 toString hashCode equals方法

注意:@Data注解生成的equals hashCode方法,只会比较当前对象中的属性,对于继承的对象中的属性不能,因此需要显示的方法添加

@EqualsAndHashCode(callSuper = true)

@Mappe注解相关

从mybatis3.4.0开始加入了@Mapper注解,目的就是为了不再写mapper映射文件。
在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类。(有映射文件时可以省略该注解,service注入时会提示,但可正常运行)

@ServletComponentScan

在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过@WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码

单元测试相关

在SpringBoot的2.2版本之后集成了JUnit5版本

Junit组成

JUnit Platform + JUnit Jupiter + JUnit Vintage

SpringBoot2.2前用法

@SpringBootTest + RunWith(SpringRunner.class)

2.2

@SpringBootTest+@Test

导包为org.junit.jupiter.api.Test

日期格式问题

后端用util包下的@Date

可以和后端的日期类型直接进行匹配

若前端传递的时间类型不包含时分秒等信息,此时需要添加@

@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")

二者区别:

注意:日期的格式也可以在Spirng的全局化进行配置

@DateTimeFormat:将字符串的时间转为Date类型,此注解只能用来form表单请求和get请求,
该注解单独使用时,会出现时间晚8小时
@JsonFormat:将字符串的时间类型转为Date类型,此注解只能用于json请求,在Controller层入参处需要使用@RequestBody

@DateTimeFormat:用于前端传后端

@JsonFormat:前传后、后传前都可以

过滤器相关配置

1,进行配置

2.直接在 Filter 上使用 @Component 注解,这种会默认进行所有匹配

FilterChain。doFilter:将请求交给下一个filter进行处理,如果没有filter,就是访问资源

SpirngSecurity

SpringSecurity是一个权限管理框架,核心是认证和授权

spring security提供的权限管理功能主要有两种:

  • 基于过滤器的权限管理功能(FilterSecurityInterceptor)
  • 基于AOP的权限管理功能(MethodSecurityInterceptor)
学习尚硅谷视频整理的文档 Spring Boot 1 1 Spring Boot入门 4 1.1 简介 4 1.2 微服务(martin fowler发表了一篇文章) 5 1.3 环境约束 7 1.4 第一个Spring Boot项目(jar):HelloWorld 8 1.5 入门案例详解 11 1.5.1 POM文件 11 1.5.2 主程序类,主入口类 12 1.6 使用Spring Initializer向导快速创建Spring Boot 16 2 Spring Boot配置 18 2.1 配置文件 18 2.2 YML语法 19 2.3 YML配置文件值获取 21 2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置 33 2.10 外部配置加载顺序 36 2.11 自动配置原理 37 2.12 @Conditional派生注解 41 3 Spring Boot与日志 42 3.1 日志框架分类和选择 42 3.2 SLF4j使用 43 3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring Boot默认配置 47 3.6 指定日志文件和日志Profile功能 52 3.7 切换日志框架(不使用SLF4j+LogBack) 54 4 Spring Boot与Web开发 55 4.1 Web开发简介 55 4.2 静态资源映射规则 56 4.3 引入Thymeleaf 60 4.4 Thymeleaf语法 61 4.5 SpringMVC自动配置原理 67 4.6 SpringBoot扩展与全面接管 70 4.7 如何修改SpringBoot的默认配置 72 4.8 【实验】CRUD操作 73 4.8.1 默认访问首页 73 4.8.2 登录页面国际化 74 4.8.3 登录 80 4.8.4 拦截器进行登录检查 81 4.8.5 实验要求(没按要求做,不想改了!) 82 4.8.6 CRUD-员工列表 83 4.8.7 CRUD-员工修改 86 4.8.8 CRUD-员工添加 87 4.8.9 CRUD-员工删除 88 4.9 错误处理原理&错误页面定制 90 4.10 配置嵌入式Servlet容器(springboot 1.50版本) 97 4.10.1 如何定制和修改Servelt容器的相关配置 97 4.10.2 注册servlet三大组件【servlet,filter,listener】 98 4.10.3 替换为其他嵌入式容器 102 4.10.4 嵌入式servlet容器自动配置原理 103 4.10.5 嵌入式servlet容器启动原理 103 4.11 使用外置的Servlet容器 104 4.11.1 步骤 104 4.11.2 原理 107 5 Spring Boot与Docker(虚拟化容器技术) 110 5.1 简介 110 5.2 核心概念 111 5.3 安装Docker 112 5.4 Docker常用命令&操作 113 5.5 安装MySQL示例 114 6 Spring Boot与数据访问 115 6.1 JDBC 115 6.1.1 实现 115 6.1.2 自动配置原理 116 6.2 整合Durid数据源 117 6.3 整合Mybatis 122 6.3.1 注解版 123 6.3.2 配置文件版 124 6.4 整合SpringData JPA 125 6.4.1 SpringData简介 125 6.4.2 整合 126 7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3 编写事件监听机制 132 8 Spring Boot自定义starters 136 8.1 概述 136 8.2 步骤 137 9 更多Springboot整合示例 144 10 Spring Boot与缓存 145 10.1 JSR107缓存规范 145 10.2 Spring的缓存抽象 146 10.2.1 基本概念 146 10.2.2 整合项目 146 10.2.3 CacheEnable注解 148 10.2.4 Cache注解 150 10.3 整合redis 154 10.3.1 在Docker上安装redis 154 10.3.2 Redis的Template 154 10.3.3 整合(百度) 155
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值