Skip to content

SSM 框架

Spring + SpringMVC + MyBatis — 从手写 Servlet 到框架化开发。


Spring

IoC(控制反转)

将对象的创建和依赖关系的管理交给 Spring 容器 原来:手动 new 对象,手动注入依赖 现在:Spring 容器管理 Bean 的生命周期 配置方式:XML、注解(@Component, @Service, @Repository, @Controller)、Java Config

DI(依赖注入)

构造方法注入:<constructor-arg> setter 注入:<property> 注解注入:@Autowired(按类型)、@Qualifier(按名称)、@Resource(按名称) @Autowired 默认按类型匹配,@Resource 默认按名称匹配

Bean 作用域

singleton:单例(默认),整个容器一个实例 prototype:原型,每次获取都创建新实例 request:每次 HTTP 请求一个实例(Web 环境) session:每个 HTTP Session 一个实例(Web 环境)

Bean 生命周期

实例化 → 属性注入 → BeanNameAware → BeanFactoryAware → ApplicationContextAware → BeanPostProcessor#before → @PostConstruct → InitializingBean → init-method → BeanPostProcessor#after → 使用 → @PreDestroy → DisposableBean → destroy-method

AOP(面向切面编程)

核心概念

切面 (Aspect):横切关注点的模块化 连接点 (JoinPoint):程序执行的某个点(方法执行) 切入点 (Pointcut):匹配连接点的表达式 通知 (Advice):在切入点执行的动作 目标对象 (Target):被代理的对象 代理 (Proxy):AOP 创建的代理对象

通知类型

@Before:前置通知,在目标方法执行前 @AfterReturning:后置通知,在目标方法正常返回后 @AfterThrowing:异常通知,在目标方法抛出异常后 @After:最终通知,无论是否异常都执行 @Around:环绕通知,最强大,可以控制目标方法是否执行

切入点表达式

execution(* com.example.service..(..))

  • 第一个 *:任意返回类型
  • 包名.*:该包下所有类
  • 第二个 *:所有方法
  • (..):任意参数

AOP 实现原理

JDK 动态代理:目标类实现了接口时使用 CGLIB 代理:目标类没有实现接口时使用(继承方式) Spring 默认优先使用 JDK 动态代理

SpringMVC

请求处理流程

  1. DispatcherServlet 接收请求
  2. HandlerMapping 根据 URL 查找 Handler
  3. HandlerAdapter 执行 Handler
  4. Controller 处理业务逻辑,返回 ModelAndView
  5. ViewResolver 解析视图
  6. DispatcherServlet 渲染视图并响应

常用注解

@RequestMapping:映射请求 URL @GetMapping / @PostMapping:简化版 @RequestParam:获取请求参数 @PathVariable:获取 URL 路径变量 @RequestBody:接收 JSON 请求体 @ResponseBody:返回 JSON 响应体 @ModelAttribute:表单数据绑定

文件上传

表单:enctype="multipart/form-data" 配置:CommonsMultipartResolver(最大文件大小、编码) Controller:@RequestParam("file") MultipartFile file file.transferTo(new File(path)) 保存文件

拦截器 (Interceptor)

实现 HandlerInterceptor 接口 preHandle:Controller 执行前(返回 false 中断) postHandle:Controller 执行后、视图渲染前 afterCompletion:视图渲染后(资源清理) 配置:<mvc:interceptors>

MyBatis 进阶

分页插件

PageHelper:sql 语句后面加上 limit PageHelper.startPage(pageNum, pageSize) 返回 PageInfo 对象(包含总记录数、总页数等)

缓存机制

一级缓存:SqlSession 级别,默认开启 二级缓存:Mapper 级别,需要手动开启 <cache/> 缓存失效:执行 insert/update/delete 会清空

逆向工程

根据数据库表自动生成实体类、Mapper 接口、XML 映射文件 使用 mybatis-generator-maven-plugin

AI 应用开发 / Agent 开发实习生