概述
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)