SSM 概念在项目中:
SpringMVC 框架负责控制层
Spring 框架负责整体和业务层的声明式事务管理
MyBatis 框架负责数据库访问层
实施:通过编写配置文件,实现 SpringIoC 容器接管一切组件
本质上说,整合就是将三层架构和框架核心API组件交给SpringIoC容器管理
一个容器可能就够了,但是我们常见的操作是创建两个IoC容器(web容器和root容器),组件分类管理
总结:
容器名
盛放组件
web容器
web相关组件(controller,springmvc 核心组件)
root容器
业务和持久层相关组件(service,aop,tx,dataSource,mybatis,mapper 等)
整合实战导入依赖
需要依赖清单分析:
spring
ioc/di: spring-context ,jakarta.annotation-api
aop:spring-aspects
tx:spring-tx,spring-tx
springmvc
spring-webmvc
jakarta.jakartaee-web- ...
java
未读全局异常处理机制对于异常的处理,一般分为两种方式:
编程式异常处理:是指在代码中显式地编写处理异常的逻辑。它通常涉及到对异常类型的检测及其处理,例如使用 try-catch 块来捕获异常,然后在 catch 块中编写特定的处理代码,或者在 finally 块中执行一些清理操作。在编程式异常处理中,开发人员需要显式地进行异常处理,异常处理代码混杂在业务代码中,导致代码可读性较差。
声明式异常处理:则是将异常处理的逻辑从具体的业务逻辑中分离出来,通过配置等方式进行统一的管理和处理。在声明式异常处理中,开发人员只需要为方法或类标注相应的注解(如 @Throws 或 @ExceptionHandler),就可以处理特定类型的异常。相较于编程式异常处理,声明式异常处理可以使代码更加简洁、易于维护和扩展
声明异常处理控制器类声明异常处理控制器类
/**
* projectName: com.atguigu.execptionhandler
*
* description: 全局异常处理器,内部可以定义异常处理Handler!
*/
/**
* @RestControllerAdv ...
java
未读概念
RESTful(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序和服务之间的通信。它是一种基于标准 HTTP 方法的简单和轻量级的通信协议,广泛应用于现代的Web服务开发
风格特点
每一个URI代表1种资源(URI 是名词)
客户端使用 GET、POST、PUT、DELETE 4个表示操作方式的动词对服务端资源进行操作:GET 用来获取资源,POST用来新建资源(也可以用于更新资源),PUT 用来更新资源,DELETE 用来删除资源;
资源的表现形式是 XML 或者 JSON
客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
请求方式要求
操作
传统风格
REST 风格
保存
/CRUD/saveEmp
URL 地址:/CRUD/emp
请求方式:POST
删除
/CRUD/removeEmp?empId=2
URL 地址:/CRUD/emp ...
Spring MVC 作用SSM框架构建起单体项目的技术栈需求!其中的SpringMVC负责表述层(控制层)实现简化
例如:
请求映射
数据输入
视图界面
请求分发
表单回显
会话控制
过滤拦截
异步交互
文件上传
文件下载
数据校验
类型转换
等等等
总结:
简化前端参数接收( 形参列表 )
简化后端数据响应(返回值)
核心组件
Spring MVC与许多其他Web框架一样,是围绕前端控制器模式设计的,其中中央 Servlet DispatcherServlet 做整体请求处理调度!
除了DispatcherServletSpringMVC还会提供其他特殊的组件协作完成请求处理和响应呈现。
SpringMVC涉及组件理解:
DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]
HandlerMapping : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它内部缓存handler(controller方法)和hand ...
java
未读事务概念编程式事务是指手动编写程序来管理事务,即通过编写代码的方式直接控制事务的提交和回滚。在 Java 中,通常使用事务管理器(如 Spring 中的 PlatformTransactionManager)来实现编程式事务。
编程式事务的主要优点是灵活性高,可以按照自己的需求来控制事务的粒度、模式等等。但是,编写大量的事务控制代码容易出现问题,对代码的可读性和可维护性有一定影响。
例如
Connection conn = ...;
try {
// 开启事务:关闭事务的自动提交
conn.setAutoCommit(false);
// 核心操作
// 业务代码
// 提交事务
conn.commit();
}catch(Exception e){
// 回滚事务
conn.rollBack();
}finally{
// 释放数据库连接
conn.close();
}
声明式事务是指使用注解或 XML ...
java
未读代理模式
场景:我们设计一个计算器类,在加减乘除功能添加日记功能,表明是那个功能执行了
声明接口
public interface Calculator {
int add(int i, int j);
int sub(int i, int j);
int mul(int i, int j);
int div(int i, int j);
}
实现接口
public class CalculatorImpl implements Calculator {
@Override
public int add(int i, int j) {
System.out.println("[日志] add 方法开始了,参数是:" + i + "," + j);
int result = i + j;
System.out.println("方法内部 result = " + result);
System.out.println("[日志] add 方法结束了,结果是:" + resul ...
java
未读ioc 容器组件
几乎整个系统都是由组件构成的
容器
Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这些组件之间丰富的相互依赖关系
例子:
比如在 Servlet 创建 Service 对象,附加事务功能
原始做法
private BookServlet bookServlet = new BookServletImpl();
// 获取数据库连接
Connection conn = ...
try{
// 关闭事务自动提交
conn.setAutoCommit(false);
// 执行核心操作
chain.doFilter(req,resp);
// 提交事务
conn.commit();
}catch(Exception e){
// 回滚事务
conn.rollBac ...
封装请求响应结果和异常处理响应数据封装接口响应给前端的数据统一风格
{
"code": 200,
"data": true,
"msg": "ok",
"description": null
}
代码实现:使用泛型传入返回 data 里的数据类型
@Data
public class BaseResponse<T> implements Serializable {
private static final long serialVersionUID = -1053725934018053785L;
private int code;
private T data;
private String msg;
private String description;
public BaseResponse(int code, T data, String msg) {
this.code = code;
this.data = data;
...