# 总结


## 1、IOC


  IOC:控制反转,通过反射来创建对象


  作用:不用我们自己创建对象,能够降低耦合度,能够提高代码的可测试性和可维护性。


使用步骤:


1. 在三层架构上直接使用@RestController、@Service、@Mapper注解

2. 在类里面添加@Autowired注解则可以直接从IOC容器中获取对象




## 2、PageHelper


PageHelper:他是一个分页插件,在查询时能够进行分页操作


使用步骤:


1. 先在pom文件中添加依赖

2. 在service层中使用.startPage方法

3. 再创建一个page的返回对象

4. 设置返回值中的Total和Total

5. 使用这个放回对象放回到controller中




## 3、事务


事务:对一组数据进行操作,要么同时成功,要么同时失败。


事务的四大特性:原子性、一致性、隔离性、持久性


| **数据不一致**     | 多个操作之间部分完成,导致数据库处于中间状态(如转账失败一半) | 通过原子性和一致性保证操作要么全做,要么全不做           |

| ------------------ | ------------------------------------------------------------ | -------------------------------------------------------- |

| **并发冲突**       | 多个用户同时访问和修改同一数据,可能造成数据错误             | 通过隔离性控制并发访问,避免脏读、不可重复读、幻读等问题 |

| **系统崩溃恢复**   | 系统在操作过程中崩溃,数据未保存或保存不完整                 | 通过持久性确保已提交事务的数据不会丢失                   |

| **业务逻辑完整性** | 复杂业务流程中需要多个步骤协调一致                           | 事务将多个操作封装成一个整体,便于管理                   |


使用步骤:再对多表进行操作时可以在service层的类上添加@Transactional注解




## 4、OSS


OSS:将数据上传到阿里云对象服务存储中


### 作用:


1. 能够解决在本地存储的不安全性

2. 能够大量存储

3. 数据存储安全高可用


### 使用步骤:


#### 1. 创建Bucket


- 登录阿里云控制台,进入OSS管理页面。

- 点击“创建Bucket”,填写Bucket名称、选择地域、设置访问权限等信息后确认创建。


#### 2. 上传数据


- 可以通过控制台直接上传文件,或者使用SDK/API编程方式上传数据到指定的Bucket中。

- 支持单文件上传和分片上传(适合大文件)。


#### 3. 访问控制


- 设置Bucket或Object级别的访问权限,包括公共读、私有等模式。

- 使用RAM(Resource Access Management)进行细粒度的权限管理。


#### 4. 数据处理(可选)


- 利用OSS提供的图片处理、音视频转码等功能对存储的数据进行加工处理。


#### 5. 下载/访问数据


- 直接通过生成的链接下载公开文件,或通过签名URL的方式安全地访问私有文件。




## 5、全局异常处理器


全局异常处理器:全局异常处理器是一种用于捕获和处理应用程序中未被捕获的异常的机制


作用:


1. **提高代码的可维护性**:避免了在每个方法里都写重复的异常处理逻辑。

2. **集中管理异常**:所有异常可以在一个地方进行处理,便于维护和更新异常处理策略。

3. **增强用户体验**:能够为用户提供一致且友好的错误提示,而不是暴露技术细节或堆栈跟踪。

4. **简化调试和日志记录**:有助于快速定位问题所在,并记录详细的错误信息以便后续分析。

5. **支持自定义处理逻辑**:可以根据不同类型的异常采取不同的处理措施,如重试、通知管理员等。


使用步骤:


1. 使用`@ControllerAdvice`注解创建一个全局异常处理器类,在该类中可以通过`@ExceptionHandler`方法来定义针对不同类型异常的处理逻辑。

2. 为了返回一致格式的错误信息,通常会定义一个响应实体类

3. 确保你的Spring Boot应用正确扫描到`@ControllerAdvice`标注的类。

4. 进行单元测试或集成测试,验证各种异常情况下是否按预期工作。




## 6、JWT


作用:


1. **身份验证**:JWT最常用的方式是在用户成功登录后生成一个JWT,之后每次请求时都将此令牌放在HTTP头部Authorization字段中传递给服务端,以此实现用户的身份验证。

2. **安全性增强**:通过使用HMAC算法或者RSA公私钥对进行签名,确保了数据未被篡改并且来源可信。


使用步骤:


1. 创建JWT。

2. 发送JWT,将生成的JWT放入HTTP请求的Authorization头部发送到服务器。

3. 验证JWT,服务器接收到请求后,从Authorization头部提取JWT并验证其有效性。

4. 处理业务逻辑,如果JWT验证成功,则根据载荷中的信息处理相应的业务逻辑。




## 7、过滤器


作用:


1. **统一处理**:可以在一个地方集中处理多个请求共有的逻辑,避免代码重复。

2. **安全性增强**:可用于身份验证、授权检查、防止跨站脚本攻击(XSS)、SQL注入等安全措施。

3. **性能优化**:例如通过GZIP压缩响应内容减少传输数据量,提高加载速度。

4. **日志记录与监控**:方便地记录每个请求的详细信息,便于调试和性能分析。

5. **异常处理**:对未捕获的异常进行统一处理,返回友好的错误页面给客户端。




使用步骤:


1. 创建过滤器类,首先创建一个类实现`javax.servlet.Filter`接口,并重写其方法。

2. 配置过滤器,在web.xml文件中配置过滤器,指定哪些URL模式应该由该过滤器处理。

3. 测试过滤器,部署应用程序并访问相应的URL路径,观察控制台输出或浏览器行为,确认过滤器是否按预期工作。

4. 同时可以根据实际需求,在`doFilter()`方法中添加更多的逻辑,比如身份验证、权限控制、日志记录等。




## 8、拦截器


拦截器:它主要用于在请求到达目标资源之前或响应返回客户端之前对这些请求或响应进行一些预处理或后处理操作。


作用:


1. **日志记录**:可以在请求到达服务器前或响应返回给客户端前记录日志。

2. **权限验证**:在处理用户请求之前检查用户是否拥有访问特定资源的权限。


操作步骤:


1. 首先,需要创建一个实现`HandlerInterceptor`接口的类。preHandle():在请求处理之前被调用。

2. 注册拦截器,需要创建一个类来注册你的拦截器。这个类应该扩展`WebMvcConfigurer`并重写`addInterceptors`方法

3. 测试与配置




## 9、AOP


AOP:面向切面编程


作用:


1. **减少代码重复**:例如日志记录、输入校验等横切关注点可以在一处定义,并应用于需要的地方。

2. **增强现有代码**:无需修改原始代码即可添加新的行为,比如性能监控、异常处理等。


使用步骤:


1. 添加相关依赖

2. 定义切面,创建一个类并使用`@Aspect`注解标记它。这个类中的方法将会包含通知(Advice),用于指定在何处以及何时执行特定的横切逻辑。


### Spring AOP 通知类型:


#### @Around


环绕通知,此注解标注的通知方法在目标方法前、后都被执行


#### @Before


前置通知,此注解标注的通知方法在目标方法前被执行


#### @After


后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行


#### @AfterReturning


返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行


#### @AfterThrowing


异常后通知,此注解标注的通知方法发生异常后执行