SSM 框架核心知识详解(Spring + SpringMVC + MyBatis)

news2025/6/7 4:22:53

🌱 第一部分:Spring 核心原理与使用

1. 什么是 Spring

Spring 是一个开源的 Java 企业级开发框架,旨在简化 Java 企业应用程序开发。它核心思想是控制反转(IoC)和面向切面编程(AOP),使开发者能更轻松地创建松耦合、可测试和易维护的应用程序。

它提供了对 Bean 的生命周期管理、依赖注入、声明式事务管理、AOP 支持等功能,并与多种其他框架(如 Hibernate、MyBatis、Struts)高度兼容,形成了完整的企业级应用解决方案。

2. 什么是 SpringMVC

SpringMVC 是 Spring 框架中的一个模块,是一个基于 Servlet 的 Web 框架,遵循 MVC(Model-View-Controller)设计模式。它用于构建 Web 应用的表现层,负责处理请求和返回响应,核心处理器是 DispatcherServlet,它协调整个请求流程。

3. 什么是 MyBatis

MyBatis 是一款持久层框架,通过 XML 或注解将 SQL 语句和 Java 方法关联起来,使开发者能够直接控制 SQL 的执行过程和映射规则,具有灵活、高效的特点。

它避免了 Hibernate 的全自动 ORM 的复杂性,允许开发者编写原生 SQL,使 SQL 更加可控、易调试。

4. Spring 的核心

  • IoC 容器:管理对象的生命周期与依赖关系。

  • AOP 支持:通过切面简化日志、安全、事务等横切关注点。

  • 容器配置方式多样:支持 XML、注解、Java 配置类。

  • 事务管理:声明式和编程式事务支持。

  • 模块化架构:包括 Beans、Context、Core、AOP、JDBC 等模块。

5. Spring 的优点

  • 解耦合:IoC 机制有效降低模块间耦合。

  • 高扩展性:提供大量扩展点与标准接口。

  • 易测试:可通过依赖注入替换真实对象。

  • 广泛整合:与主流框架、库无缝集成。

  • 轻量级:按需加载模块,避免臃肿。

6. @Autowired@Resource 区别

特性@Autowired@Resource
所属标准SpringJSR-250 标准
注入方式默认按类型(可配合 @Qualifier默认按名称(可使用 name 属性)
适用范围Spring 内部推荐Java 通用注解
依赖检查可设置 required=false不支持

7. Spring 的生命周期(Bean 生命周期)

  1. 加载 Bean 的定义信息(XML、注解、JavaConfig)

  2. 实例化 Bean(反射)

  3. 设置属性(依赖注入)

  4. PostProcessor 后置处理

  5. Bean 准备就绪使用

  6. 容器销毁时调用销毁方法(如 @PreDestroy 或 destroy-method)

8. 依赖注入的方式

  • 构造器注入:通过构造方法传入依赖(推荐用于不可变对象)。

  • Setter 注入:通过属性 setter 方法注入。

  • 字段注入:使用 @Autowired 注解直接注入(不推荐用于测试)。

9. Spring 中 Bean 是单例的吗?

默认是单例(singleton)。Spring 容器中 Bean 默认作用域是单例,也可配置为:

  • prototype:每次获取都新建实例。

  • request:每个 HTTP 请求一个实例(Web 项目)。

  • session:每个会话一个实例。

  • application:每个 ServletContext 一个实例。

  • websocket:每个 WebSocket 一个实例。

10. 四大注解区别

注解描述所在层次
@Component标识为普通组件(通用)任意层
@Controller标识控制层组件(处理请求)表现层
@Service标识服务层组件(业务逻辑)业务逻辑层
@Repository标识持久层组件(数据访问)DAO 层

11. 控制反转与依赖注入

  • 控制反转(IoC):将对象创建和管理的控制权交给容器,程序不再主动创建对象,而是由容器注入。

  • 依赖注入(DI):容器在创建对象时,将它依赖的资源注入进来。

区别:IoC 是一种思想,DI 是实现 IoC 的技术手段。

🔁 第二部分:AOP 与常用注解

12. Spring AOP 术语

  • Aspect(切面):定义横切逻辑的模块。

  • JoinPoint(连接点):程序执行过程中可插入切面的点,如方法调用。

  • Pointcut(切入点):定义哪些 JoinPoint 被织入。

  • Advice(通知):切面在连接点执行的动作(如前置、后置)。

  • Weaving(织入):将切面逻辑加入到目标对象的过程。

13. 通知的类型

  • @Before:方法前执行

  • @After:方法后执行(无论成功或异常)

  • @AfterReturning:方法成功返回后执行

  • @AfterThrowing:方法抛出异常后执行

  • @Around:环绕整个方法执行(最强大)

14. 注解作用说明

  • @Configuration:标识配置类,等价于 XML 配置文件

  • @Bean:定义 Bean 方法,注册到容器中

  • @Controller:标识控制器类,用于处理请求

  • @Value:注入配置文件中的值

🌐 第三部分:SpringMVC 深入

15. MVC 模式

MVC 是一种设计模式:

  • Model:数据模型(如实体类、Service)

  • View:视图(如 JSP、Thymeleaf、HTML)

  • Controller:控制器,处理请求、调用服务、返回视图

16. SpringMVC 工作原理

  1. 用户请求由前端控制器 DispatcherServlet 接收

  2. 查找 HandlerMapping 获取对应 Controller

  3. 由 HandlerAdapter 调用处理器方法

  4. 方法执行返回 ModelAndView

  5. 视图解析器解析视图名

  6. 响应渲染返回给用户

17. SpringMVC 优点

  • 请求处理流程清晰、可扩展性强

  • 注解简化配置

  • 支持 RESTful URL

  • 与 Spring 紧密集成

18. 常用注解作用

  • @RequestMapping:映射 URL 到方法

  • @ResponseBody:返回 JSON 或 XML

  • @PathVariable:获取路径参数

  • @RequestParam:获取请求参数

💾 第四部分:MyBatis 专项

19. BeanFactory vs ApplicationContext

特性BeanFactoryApplicationContext
加载方式延迟加载预加载单例 Bean
国际化支持
事件机制不支持支持
推荐使用场景轻量应用企业级开发推荐

20. 数据库事务的 ACID 特性

  1. 原子性(Atomicity):操作要么全部成功,要么全部失败。

  2. 一致性(Consistency):事务执行前后,数据保持一致。

  3. 隔离性(Isolation):并发事务之间互不干扰。

  4. 持久性(Durability):事务提交后修改永久保存。

21. MyBatis 优点

  • SQL 可控,便于优化

  • 映射灵活,可自定义规则

  • 轻量,易与 Spring 集成

  • 支持动态 SQL

22. 常用标签说明

  • <select>:查询语句

  • <insert>:插入语句

  • <update>:更新语句

  • <delete>:删除语句

  • <resultMap>:复杂结果映射

  • <if><where><foreach>:动态 SQL 控制

23. #{}${} 区别

表达式描述安全性
#{}占位符,预编译传参安全(防 SQL 注入)
${}直接拼接字符串不安全(易被注入)

24. 实现模糊查询的方式

<!-- XML 映射方式 -->
<select id="findByName" resultType="User">
  SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
// Mapper 接口方式
List<User> findByName(String name);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C#】Quartz.NET怎么动态调用方法,并且根据指定时间周期执行,动态配置类何方法以及Cron表达式,有请DeepSeek

&#x1f339;欢迎来到《小5讲堂》&#x1f339; &#x1f339;这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。&#x1f339; &#x1f339;温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01;&#…

02 Deep learning神经网络的编程基础 逻辑回归--吴恩达

逻辑回归 逻辑回归是一种用于解决二分类任务&#xff08;如预测是否是猫咪等&#xff09;的统计学习方法。尽管名称中包含“回归”&#xff0c;但其本质是通过线性回归的变体输出概率值&#xff0c;并使用Sigmoid函数将线性结果映射到[0,1]区间。 以猫咪预测为例 假设单个样…

MySQL的并发事务问题及事务隔离级别

一、并发事务问题 1). 赃读&#xff1a;一个事务读到另外一个事务还没有提交的数据。 比如 B 读取到了 A 未提交的数据。 2). 不可重复读&#xff1a;一个事务先后读取同一条记录&#xff0c;但两次读取的数据不同&#xff0c;称之为不可重复读。 事务 A 两次读取同一条记录&…

ProfiNet 分布式 IO 在某污水处理厂的应用

随着城市化进程的加速&#xff0c;污水处理厂的规模和复杂性不断增加&#xff0c;对自动化控制系统的要求也越来越高。PROfinet 分布式 IO 作为一种先进的工业通信技术&#xff0c;以其高速、可靠、灵活的特性&#xff0c;为污水处理厂的自动化升级提供了有力支持。本文将结合某…

vue2 , el-select 多选树结构,可重名

人家antd都支持&#xff0c;elementplus 也支持&#xff0c;vue2的没有&#xff0c;很烦。 网上其实可以搜到各种的&#xff0c;不过大部分不支持重名&#xff0c;在删除的时候可能会删错&#xff0c;比如树结构1F的1楼啊&#xff0c;2F的1楼啊这种同时勾选的情况。。 可以全…

Excel处理控件Aspose.Cells教程:使用 C# 从 Excel 进行邮件合并

邮件合并功能让您能够轻松批量创建个性化文档&#xff0c;例如信函、电子邮件、发票或证书。您可以从模板入手&#xff0c;并使用电子表格中的数据进行填充。Excel 文件中的每一行都会生成一个新文档&#xff0c;并在正确的位置包含正确的详细信息。这是一种自动化重复性任务&a…

EXCEL通过DAX Studio获取端口号连接PowerBI

EXCEL通过DAX Studio获取端口号连接PowerBI 昨天我分享了EXCEL链接模板是通过获取端口号和数据库来连接PowerBI模型的&#xff0c;链接&#xff1a;浅析EXCEL自动连接PowerBI的模板&#xff0c;而DAX Studio可以获取处于打开状态的PowerBI的端口号。 以一个案例分享如何EXCEL…

C# 委托UI控件更新例子,何时需要使用委托

1. 例子1 private void UdpRxCallBackFunc(UdpDataStruct info) {// 1. 前置检查防止无效调用if (textBoxOutput2.IsDisposed || !textBoxOutput2.IsHandleCreated)return;// 2. 使用正确的委托类型Invoke(new Action(() >{// 3. 双重检查确保安全if (textBoxOutput2.IsDis…

大模型数据流处理实战:Vue+NDJSON的Markdown安全渲染架构

在Vue中使用HTTP流接收大模型NDJSON数据并安全渲染 在构建现代Web应用时&#xff0c;处理大模型返回的流式数据并安全地渲染到页面是一个常见需求。本文将介绍如何在Vue应用中通过普通HTTP流接收NDJSON格式的大模型响应&#xff0c;使用marked、highlight.js和DOMPurify等库进…

python项目如何创建docker环境

这里写自定义目录标题 python项目创建docker环境docker配置国内镜像源构建一个Docker 镜像验证镜像合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPant…

PyTorch--池化层(4)

池化层&#xff08;Pooling Layer&#xff09; 用于降低特征图的空间维度&#xff0c;减少计算量和参数数量&#xff0c;同时保留最重要的特征信息。 池化作用&#xff1a;比如1080p视频——720p 池化层的步长默认是卷积核的大小 ceil 允许有出界部分&#xff1b;floor 不允许…

2025年大模型平台落地实践研究报告|附75页PDF文件下载

本报告旨在为各行业企业在建设落地大模型平台的过程中&#xff0c;提供有效的参考和指引&#xff0c;助力大模型更高效更有价值地规模化落地。本报告系统性梳理了大模型平台的发展背景、历程和现状&#xff0c;结合大模型平台的特点提出了具体的落地策略与路径&#xff0c;同时…

PPTAGENT:让PPT生成更智能

想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型&#xff0c;以发挥其最大潜力。 CSDN教学平台录播地址…

《汇编语言》第13章 int指令

中断信息可以来自 CPU 的内部和外部&#xff0c;当 CPU 的内部有需要处理的事情发生的时候&#xff0c;将产生需要马上处理的中断信息&#xff0c;引发中断过程。在第12章中&#xff0c;我们讲解了中断过程和两种内中断的处理。 这一章中&#xff0c;我们讲解另一种重要的内中断…

Redis实战-基于redis和lua脚本实现分布式锁以及Redission源码解析【万字长文】

前言&#xff1a; 在上篇博客中&#xff0c;我们探讨了单机模式下如何通过悲观锁&#xff08;synchronized&#xff09;实现"一人一单"功能。然而&#xff0c;在分布式系统或集群环境下&#xff0c;单纯依赖JVM级别的锁机制会出现线程并发安全问题&#xff0c;因为这…

计算机网络 : 应用层自定义协议与序列化

计算机网络 &#xff1a; 应用层自定义协议与序列化 目录 计算机网络 &#xff1a; 应用层自定义协议与序列化引言1. 应用层协议1.1 再谈协议1.2 网络版计算器1.3 序列化与反序列化 2. 重新理解全双工3. socket和协议的封装4. 关于流失数据的处理5. Jsoncpp5.1 特性5.2 安装5.3…

Python Day42 学习(日志Day9复习)

补充&#xff1a;关于“箱线图”的阅读 以下图为例 浙大疏锦行 箱线图的基本组成 箱体&#xff08;Box&#xff09;&#xff1a;中间的矩形&#xff0c;表示数据的中间50%&#xff08;从下四分位数Q1到上四分位数Q3&#xff09;。中位线&#xff08;Median&#xff09;&#…

CMake在VS中使用远程调试

选中CMakeLists.txt, 右键-添加调试配置-选中"C\C远程windows调试" 之后将 aunch.vs.json文件改为如下所示: CMake在VS中使用远程调试时,Launch.vs.json中远程调试设置 ,远程电脑开启VS专用的RemoteDebugger {"version": "0.2.1","defaul…

《图解技术体系》How Redis Architecture Evolves?

Redis架构的演进经历了多个关键阶段&#xff0c;从最初的内存数据库发展为支持分布式、多模型和持久化的高性能系统。以下为具体演进路径&#xff1a; 单线程模型与基础数据结构 Redis最初采用单线程架构&#xff0c;利用高效的I/O多路复用&#xff08;如epoll&#xff09;处…

一文速通Python并行计算:12 Python多进程编程-进程池Pool

一文速通 Python 并行计算&#xff1a;12 Python 多进程编程-进程池 Pool 摘要&#xff1a; 在Python多进程编程中&#xff0c;Pool类用于创建进程池&#xff0c;可并行执行多个任务。通过map、apply等方法&#xff0c;将函数和参数分发到子进程&#xff0c;提高CPU利用率&…