3. SSM 框架答辩
本章收录 67 道老师常问问题,高频题靠前。回答时尽量结合自己的项目举例。
1. Spring IOC原理、作用、优势?
IOC即控制反转,是Spring的核心思想。传统开发是开发者手动new对象,控制权在程序;IOC将对象的创建、初始化、销毁、依赖注入全部交给Spring容器管理,控制权反转给框架。核心作用是实现组件解耦,降低代码依赖,方便统一管理和后期维护扩展。
2. Spring AOP原理及实际项目应用场景?
AOP面向切面编程,基于动态代理机制,在不修改原有业务代码的前提下,对方法进行增强。本项目中主要用于统一日志记录、事务控制、权限拦截、异常统一处理。优势是将通用公共功能与核心业务代码分离,实现解耦,提升代码复用性。
3. SpringMVC完整执行流程?
- 客户端发送HTTP请求
- 请求被核心前端控制器DispatcherServlet拦截
- DispatcherServlet调用HandlerMapping,根据URL匹配对应的Controller
- 通过HandlerAdapter适配器适配并执行目标Controller方法
- Controller调用业务层、持久层处理数据,返回ModelAndView
- 视图解析器解析视图路径,渲染页面或封装JSON数据
- 最终响应数据返回给前端
4. MyBatis的优缺点、为什么不用Hibernate?
MyBatis优点:轻量灵活、SQL可控、代码与SQL分离、易于维护、适配复杂业务、学习成本低。缺点:需要手动编写SQL,无法自动生成表结构。Hibernate是全自动ORM框架,无需写SQL,但SQL不可控、优化困难、笨重低效,不适合中小型灵活项目,因此本项目选用轻量灵活的MyBatis。
5. Spring事务的传播机制和隔离级别详解?
- 常用传播机制:REQUIRED默认级别,有事务加入、无则新建
- SUPPORTS支持非事务运行
- REQUIRES_NEW强制新建事务。四大隔离级别:读未提交、读已提交、可重复读、串行化,依次解决脏读、不可重复读、幻读问题,项目默认使用读已提交级别。
6. MyBatis一级缓存和二级缓存区别?
一级缓存是SqlSession级别缓存,默认开启,单次会话内有效,会话关闭缓存清空,作用域小。二级缓存是Mapper级别缓存,需要手动开启,跨会话有效,多个用户共享缓存,提升重复查询效率,适合高频查询、低频修改的数据场景。
7. SSM三层架构分别是什么?分工?
- 分为Controller控制层、Service业务层、Dao持久层。Controller接收前端参数、调用业务层、返回结果
- Service处理核心业务逻辑、事务控制、数据校验
- Dao层负责直接操作数据库,完成数据交互,三层架构完全解耦,各司其职,代码结构清晰。
8. 什么是SSM框架?各自作用和分工?
- SSM是Spring、SpringMVC、MyBatis三大框架的整合,是传统Java Web企业级开发经典架构,三层架构分工明确。Spring是核心容器,负责Bean管理、依赖注入、事务控制,统筹整个项目
- SpringMVC是WEB层框架,专门负责接收前端请求、参数封装、接口响应、视图跳转
- MyBatis是持久层框架,负责和数据库交互,完成数据增删改查,简化原生JDBC代码。
9. 一次请求在 SSM 中如何流转?
DispatcherServlet → HandlerMapping → Interceptor → Controller → Service → Mapper → DB,再原路返回。
10. SSM 与 Spring Boot 有什么区别?
SSM 通常需要大量 XML/JavaConfig 手工整合 Spring、SpringMVC、MyBatis,并外置 Tomcat;Spring Boot 约定优于配置,提供 starter、自动配置与内嵌容器,开发部署更轻。
- 配置量:Boot 大幅减少样板配置
- 部署:Boot 常用 jar 直接运行
- 生态:Boot 对监控、测试、打包支持更完善
结合毕设说明为何选 Boot 或为何教学仍学 SSM。
11. Spring IOC 是什么?结合项目说明
容器创建并注入依赖对象,降低硬编码耦合。例如 Controller 注入 Service,Service 注入 Mapper。
12. AOP 在项目里做什么?
AOP 面向切面:在不改业务代码前提下统一日志、事务、权限等横切逻辑。
- 基于 JDK 动态代理或 CGLIB
- @Aspect + @Around 记录耗时
- 答辩结合项目切面类说明
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
13. MyBatis #{} 和 ${} 区别、使用场景、安全问题?
#{}是预编译参数占位符,会自动做类型转换、拼接引号,底层使用PreparedStatement,完全防止SQL注入,安全性极高,日常查询、新增、修改参数全部使用#{}。${}是直接字符串拼接,无预编译,存在SQL注入风险,仅用于动态表名、动态排序字段等无法使用预编译的场景。
14. 事务怎么配置的?何时失效?
通常 @Transactional 加在 Service。失效常见原因:同类自调用、异常被吞、非 public、传播行为配置不当。
15. SpringMVC拦截器和过滤器的区别?
过滤器是Servlet原生组件,拦截所有请求,运行在Spring容器外,主要做编码过滤、全局跨域、静态资源过滤。拦截器是SpringMVC组件,仅拦截Controller请求,运行在Spring容器内,可获取Spring上下文,主要做权限拦截、登录校验、请求日志记录。本项目使用拦截器做登录权限校验。
16. 如何做登录鉴权?
Session 在服务端保存登录态,Cookie 携带 JSESSIONID,拦截器校验是否登录。
- 登录成功写入 userId/role 等信息
- 集群需 Redis 共享 Session 或改 JWT
- 答辩能口述登录→访问受保护接口流程
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
17. 项目包结构为何这样划分?
常见分层为 controller / service / mapper / entity / utils(或 config、dto),让请求接入、业务逻辑、数据访问职责清晰,便于维护和答辩讲解。
- Controller:接参、鉴权入口、返回统一结果
- Service:事务与业务规则
- Mapper:SQL 与持久化
结合毕设指出你项目中的包名与依赖方向(上层依赖下层)。
18. DispatcherServlet 作用?
DispatcherServlet 是 SpringMVC 的核心前端控制器,统一接收并分发 HTTP 请求。
- 作为入口协调 HandlerMapping、HandlerAdapter、视图解析等环节
- 降低 Controller 与 Servlet API 的直接耦合
- 前后端分离项目中仍负责路由到 @RestController
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
19. HandlerMapping?
HandlerMapping 负责将请求 URL 映射到具体的处理器(Controller 方法)。
- DispatcherServlet 收到请求后先询问 HandlerMapping
- 根据 @RequestMapping 等注解或 XML 配置匹配 Handler
- 返回 HandlerExecutionChain(含拦截器链)
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
20. 视图解析器?
视图解析器将 Controller 返回的逻辑视图名解析为真实视图(JSP、Thymeleaf 等)并渲染。
- 配置 prefix/suffix,如 /WEB-INF/views/ + .jsp
- 返回 JSON 时通常配合 @ResponseBody 跳过视图
- 答辩可对比「页面跳转」与「接口返回 JSON」两种模式
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
21. @RequestMapping?
@RequestMapping 将 URL 路径、HTTP 方法映射到 Controller 处理方法。
- 可限定 value/path、method、params、headers
- 类级 + 方法级可组合形成 REST 风格路径
- 项目中用于划分模块接口,如 /user/list、/order/add
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
22. @ResponseBody?
@ResponseBody 将方法返回值直接写入 HTTP 响应体,常用于返回 JSON。
- 配合 Jackson 等消息转换器序列化对象
- @RestController = @Controller + @ResponseBody
- 前后端分离项目几乎全部接口使用该方式
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
23. 参数绑定?
SpringMVC 参数绑定自动将请求参数封装为方法入参。
- 简单类型、POJO 对象按名称或 @RequestParam 绑定
- @PathVariable 绑定 REST 路径变量
- 答辩强调服务端仍需校验,不能只依赖前端
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
24. 文件上传?
文件上传通过 MultipartResolver 解析 multipart 表单,Controller 接收 MultipartFile。
- 限制大小、后缀白名单,防止恶意文件
- 存储本地目录或 OSS,数据库只存访问 URL
- 答辩可演示上传头像/附件的完整流程
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
25. 异常处理?
统一异常处理避免把堆栈直接返回前端,提升体验与安全。
- @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
- 封装统一 Result(code/msg/data)
- 记录日志便于排错,答辩可展示全局异常类
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
26. Bean 作用域?
Spring Bean 默认 singleton 单例;另有 prototype、request、session 等作用域。
- 单例需注意成员变量线程安全
- Service/Mapper 通常单例,无状态设计更安全
- 答辩可说明为何 Controller/Service 不必每次 new
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
27. 依赖注入方式?
依赖注入(DI)由容器装配依赖,替代手动 new,实现解耦。
- 构造器注入更推荐:依赖明确、便于测试、避免空指针
- @Autowired/@Resource 可用于字段或 setter
- 项目中 Controller 注入 Service,Service 注入 Mapper
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
28. applicationContext.xml?
applicationContext.xml 是 Spring 核心配置文件,声明 Bean、扫描、数据源等。
- 与 spring-mvc.xml 分工:根容器 vs Web 容器
- Boot 项目多用 JavaConfig + yml 替代 XML
- 答辩对比 SSM 手工装配与 Boot 自动配置差异
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
29. 组件扫描?
组件扫描自动发现并注册带 @Component/@Service/@Repository/@Controller 的类为 Bean。
- @ComponentScan 或 context:component-scan 指定包路径
- 减少 XML 中逐个声明 Bean
- 注意扫描范围过大可能引入无关类
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
30. 数据源配置?
数据源(DataSource)管理数据库连接,常用 Druid/HikariCP 连接池。
- 连接池复用连接,控制并发与超时
- 配置 URL、用户名、密码、最大连接数等
- 答辩可说明为何不用 DriverManager 每次新建连接
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
31. SqlSessionFactory?
SqlSessionFactory 是 MyBatis 核心工厂,负责创建 SqlSession 执行 SQL。
- 由 MyBatis-Spring 整合为单例 Bean
- 加载 mapper.xml 与 mybatis-config
- 一次请求通常对应一个 SqlSession(线程绑定)
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
32. Mapper 扫描?
Mapper 扫描自动注册 @Mapper 接口或 mapper 包下的 DAO 接口为 Spring Bean。
- @MapperScan("com.xxx.mapper") 替代逐个配置
- 接口方法与 XML/注解 SQL 绑定
- 答辩可打开一个 Mapper 接口对应 XML 说明映射关系
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
33. resultMap?
resultMap 自定义数据库列与 Java 属性映射,处理驼峰、关联、嵌套对象。
- 列名与属性不一致时必须显式映射
- 可映射一对一、一对多关联结果
- 复杂联表查询答辩时比 resultType 更清晰
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
34. 动态 SQL?
MyBatis 动态 SQL 用 if、choose、foreach 等标签按条件拼接语句。
- 适合多条件查询、批量 insert/update
- 仍应使用 #{} 预编译防注入
- 项目中列表筛选、批量删除常用 foreach
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
35. 一级缓存?
MyBatis 一级缓存是 SqlSession 级别,默认开启,同一会话内重复查询命中缓存。
- 增删改会清空当前 session 缓存
- 会话关闭后缓存失效
- 答辩对比二级缓存的跨 Session 共享特性
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
36. 二级缓存?
二级缓存是 Mapper 命名空间级别,需手动开启,跨 SqlSession 共享。
- 适合读多写少的字典类数据
- 注意脏读与分布式一致性,生产慎用
- 答辩说明本项目是否启用及原因
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
37. 延迟加载?
MyBatis 延迟加载关联对象按需查询,减初次 SQL,但可能 N+1。
- lazyLoadingEnabled 配置
- 列表页常改 join 一次查
- 答辩说明联表策略
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
38. 分页怎么做?
分页限制单次查询数据量,常用 PageHelper 或 LIMIT offset,size。
- 前端传 pageNum/pageSize,后端封装 PageInfo
- 深分页 offset 过大性能差,可延迟关联优化
- 答辩演示列表页分页接口与 SQL
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
39. 逻辑删除?
逻辑删除用 deleted/is_deleted 标志位标记删除,查询默认带 deleted=0 条件。
- 数据可恢复,满足审计需求
- MyBatis-Plus 可用 @TableLogic 自动过滤
- 注意唯一索引与业务查询都要带删除条件
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
40. 乐观锁?
乐观锁用 version 字段:更新时 WHERE id=? AND version=?,成功后 version+1。
- 适合并发冲突较少的场景
- 失败则提示用户刷新重试
- 答辩对比悲观锁 SELECT FOR UPDATE
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
41. 批量操作?
批量操作减少网络往返,MyBatis 可用 foreach 批量 insert 或 ExecutorType.BATCH。
- 注意单次批次大小,避免 SQL 过长
- 事务包裹保证一致性
- 答辩可讲导入 Excel 或批量审核场景
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
42. 多对多表?
简要结论:中间表 + 关联查询。
关于「多对多表」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 SSM 三层架构项目中,结合自己的代码、配置或表结构举例,避免只背关键词
43. 跨域?
跨域是浏览器同源策略限制不同源 AJAX 请求,需服务端 CORS 或 Nginx 反代。
- @CrossOrigin、WebMvcConfigurer、Filter 均可配置
- 允许 Origin、Methods、Headers 需最小化
- 前后端分离联调时高频考点
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
44. 字符编码?
统一 UTF-8 编码避免中文乱码:CharacterEncodingFilter、数据库 utf8mb4、JSON UTF-8。
- 请求/响应/页面/库表字符集一致
- SSM 在 web.xml 配置过滤器
- 答辩可说明曾遇到的乱码排查过程
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
45. 静态资源?
静态资源(CSS/JS/图片)可通过 mvc:resources、WebMvcConfigurer 或 Nginx 托管。
- 开发环境注意与 Controller 路径冲突
- 生产常 CDN 或 Nginx 分离静态与 API
- 答辩区分「接口」与「静态文件」访问路径
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
46. JSON 转换?
JSON 转换由 HttpMessageConverter(如 Jackson)将对象序列化为 JSON 响应。
- 配置日期格式、Long 转 String 防精度丢失
- @RestController 自动启用
- 答辩可展示统一返回体结构
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
47. 日期格式?
日期格式需前后端统一:@JsonFormat、全局 ObjectMapper 或 yyyy-MM-dd HH:mm:ss。
- 避免时间戳与字符串混用导致解析失败
- 数据库存 datetime,接口返回格式化字符串
- 答辩可提及时区(GMT+8)配置
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
48. 日志框架?
日志用于排错、审计与性能分析,常用 SLF4J + Logback/Log4j2。
- 分级别:ERROR/WARN/INFO/DEBUG
- 关键业务、异常、慢接口应记录
- 生产避免打印敏感信息与过量 DEBUG
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
49. 单元测试?
单元测试验证模块逻辑,SpringTest + JUnit/Mockito 可 Mock 依赖测 Service。
- 覆盖核心工具方法与关键分支
- 集成测试 @SpringBootTest 启动容器测接口
- 答辩如实说明测试范围与用例数
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
50. 打包方式?
SSM 传统打 war 部署外置 Tomcat;Spring Boot 打 jar 内嵌容器 java -jar 运行。
- Maven package 生成可部署包
- 注意 profile 与环境配置分离
- 答辩能说出部署命令与端口配置
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
51. 热部署?
部署流程:准备 JDK/DB→导 SQL→改配置→打包上传→启动→Nginx 反代→验证。
- 防火墙开放端口
- 进程守护 systemd
- 答辩能口述完整步骤
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
52. N+1 问题?
N+1 问题:查 N 条主记录后又逐条查关联,产生大量 SQL。
- 解决:JOIN 一次查出、批量 IN 查询、MyBatis 嵌套/延迟加载谨慎使用
- ORM 项目常见性能坑
- 答辩可结合列表页关联展示说明优化
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
53. 连接池作用?
连接池预先创建并复用数据库连接,控制最大连接数、空闲回收与超时。
- 避免频繁创建连接的开销
- Druid/Hikari 提供监控与泄漏检测
- 答辩说明连接数配置依据
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
54. SQL 注入防护?
SQL 注入通过拼接恶意 SQL 篡改语句,防护核心是 预编译 #{} 与参数校验。
- MyBatis #{} 使用 PreparedStatement
- ${} 仅用于表名/排序等不可预编译场景
- 永不拼接用户输入到 SQL
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
55. XSS 防护?
XSS 跨站脚本:恶意脚本注入页面,防护需输出编码、CSP、富文本过滤。
- 前端 v-html 谨慎,后端转义用户输入
- Cookie 设 HttpOnly 减窃取风险
- 答辩结合评论/公告等输入场景说明
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
56. 权限设计?
权限设计常用 RBAC:用户—角色—权限,菜单与接口双重校验。
- 前端隐藏按钮不等于安全,后端必须鉴权
- 拦截器/过滤器校验登录态与角色
- 答辩演示管理员与普通用户差异
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
57. 会话超时?
Session 超时未操作自动失效,web.xml 或 server.servlet.session.timeout 配置。
- 前端 401 跳登录
- 敏感系统缩短超时
- 答辩说明超时时间
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
58. 验证码?
验证码防止暴力破解与刷接口,常见图形码/短信码,服务端校验后一次性失效。
- 登录、注册、敏感操作前校验
- 可存 Session 或 Redis 并设过期
- 答辩说明为何不能仅前端校验
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
59. 统一返回?
统一返回格式如 {code, msg, data},前端据此判断成功/失败与业务数据。
- 成功 code=200 或 0,失败返回明确 msg
- 与 HTTP 状态码配合使用
- 答辩可展示 Result 工具类
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
60. 接口幂等?
幂等:同一操作多次执行结果一致,防重复提交/重复支付。
- 唯一索引、状态机、幂等 Token、分布式锁
- 前端防抖 + 后端校验双保险
- 答辩举例订单提交或支付场景
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
61. 定时任务?
定时任务按 cron 周期执行,Spring @Scheduled 或 Quartz 管理。
- 如每日统计、过期数据清理
- 注意集群下避免重复执行(分布式锁)
- 答辩说明是否使用及触发时间
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
62. 文件存储?
文件存储可选本地磁盘或 OSS 对象存储,数据库仅存路径/URL。
- 本地简单但扩展性差,OSS 适合生产
- 访问控制与防盗链
- 答辩演示上传后如何访问文件
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
63. 配置分环境?
配置分 dev/test/prod 环境,application-{profile}.yml 或 properties 切换。
- spring.profiles.active 指定环境
- 敏感信息用环境变量,不入库
- 答辩说明本地与服务器配置差异
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
64. 最大难点?
答辩「最大难点」应讲 真实问题:现象→定位→方案→验证。
- 如联表同步、权限越权、分页性能、跨域联调等
- 体现日志、断点、SQL 优化等排错过程
- 避免空泛说「技术难」,要有故事线
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
65. 如何讲登录流程?
登录流程:提交账号密码→后端校验→写 Session/签发 JWT→后续请求带凭证→拦截器鉴权。
- 密码 BCrypt 比对,不明文传输存储
- 失败次数限制与验证码可选
- 答辩建议画简单时序图
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
66. 如何讲核心业务?
讲核心业务:表结构 + 流程图 + 关键 Service/Controller 代码。
- 说清谁发起、经过哪些层、写哪些表
- 强调事务与校验点
- 演示比背诵更重要
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。
67. SSM 为何仍常见?
SSM 仍是教学与企业常见架构,因分层清晰、理解 IoC/AOP/MVC 底层原理。
- 利于理解 Spring Boot 自动配置背后机制
- 许多老项目维护仍用 SSM
- 答辩可说先学 SSM 再过渡 Boot
结合毕设:在 SSM 三层架构项目中,可指出具体类名、配置项或表结构,避免只背概念。