你知道处理Spring 九大事务失效场景吗?

spring事务失效的11种场景 1 访问权限问题: java的访问权限有4种:private、default、protected、public,它们的权限从左到右,以此变大。如果在开发中,将事务方法定义了错误的访问权限,则事务功能会失效。 @Service public class EmpService { @Transactional private void add(UserModel userModel){ saveData(userModel); } } 如上:add方法的权限被定 阅读详情

1、九大事务失效场景

1.1、数据库不支持事务

像 MySQL 数据库中的 MyISAM 引擎就不支持事务。

1.3、被代理类没有被 Spring 所管理

从源码的位置 org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessAfterInitialization

<pre class="prettyprint hljs dart" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">public Object postProcessAfterInitialization(@Nullable Object bean, String beanName) {

        if (bean != null) {

            Object cacheKey = getCacheKey(bean.getClass(), beanName);

            if (this.earlyProxyReferences.remove(cacheKey) != bean) {

                return wrapIfNecessary(bean, beanName, cacheKey);

            }

        }

        return bean;

    }

可以看出 Spring 创建代理是需要获取容器中的 Bean 的,如果没有被 Spring 所管理,那自然就创建不了代理,事务自然也就不会生效了。

1.4、被代理的类过早实例化

如果 Bean 过早的进行实例化,那么在执行初始化的过程可能就不能被代理后置处理器处理。比如在 BeanDefinitionRegistryPostProcessor 实现类中使用 beanFactory.registerSingleton("test",new Test()); 注册 Bean,这个连初始化的机会都没有。

比如在后置处理器中依赖注入:

<pre class="prettyprint hljs java" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">@Component

public class TestBeanPostProcessor implements BeanPostProcessor, Ordered {

    @Autowired

    private IAiExtractService aiExtractService;

    @Override

    public int getOrder() {

        return 1;

    }

}

注意:这个自定义后置处理器要在 AbstractAutoProxyCreator 后置处理器前执行才会出现这个问题,而 AbstractAutoProxyCreator 就只实现了 BeanPostProcessor,执行的顺序算是靠后了。

为什么在 AbstractAutoProxyCreator 之前依赖注入就会代理失效呢?因为 Spring 是先将后置处理器注册后再初始化剩余的 Bean 的,而在注册后置处理器的过程中依赖注入会初始化 Bean,而初始化会调用容器中现存的后置处理器,还没注册后置处理器自然就不会被代理了。
1.5、标注事务注解的起点不在抛出异常的范围内

可能有些人会有这个疑问,为什么事务的注解一般标注在 service 层而不是 controller 层,难道标注在控制层会事务失效?

no no no,因为一般业务逻辑都是放置在 service 层的,而从方法的调用开始,标注事务注解就是事务有效范围的开始,而因为大部分逻辑都在 service 层,controller 基本上就一行代码,一般不会抛异常,自然注解标注在 controller 和 service 就差不多了。

最最重要的是 service 层的代码可能会提供公共调用,如果我的上级没有事务注解,而我的注解又在 controller 层,service 层抛出的异常就没办法回滚了。

1.6、事务的起点是被 this 调用的,没有真正的去调用代理类

假设有段代码是这样的

<pre class="prettyprint hljs cpp" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">public void test1(){

        test2();

    }

    @Transactional(rollbackFor = Exception.class)

    public void test2(){

        throw new RuntimeException();

    }

正常的事务代理是生成的动态代理类中调用目标方法的外层是有 try catch 包裹着的,如果出现异常会执行回滚操作。但是这里在事务的起点是通过 this 去调用目标方法的,也就是使用真实的类去调用目标方法,目标方法出现异常,自然就不能回滚操作了。需要使用注入的方式注入当前对象,然后使用代理类来调用目标方法。

1.7、方法抛出的异常在方法内捕获,没有被事务拦截器所拦截

可以找到 org.springframework.transaction.interceptor.TransactionAspectSupport#invokeWithinTransaction 这个方法,这个是执行事务的具体代码。

<pre class="prettyprint hljs scala" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">try {

                // This is an around advice: Invoke the next interceptor in the chain.

                // This will normally result in a target object being invoked.

                retVal = invocation.proceedWithInvocation();

            }

            catch (Throwable ex) {

                // target invocation exception

                completeTransactionAfterThrowing(txInfo, ex);

                throw ex;

            }

            finally {

                cleanupTransactionInfo(txInfo);

            }

            commitTransactionAfterReturning(txInfo);

这行就是调用目标方法的代码 retVal = invocation.proceedWithInvocation(); 。如果你异常都捕获了,肯定是直接走到 commitTransactionAfterReturning 提交事务了啊。

1.8、抛出的异常与事务能够处理的异常不匹配

接着上面的代码:

<pre class="prettyprint hljs less" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">protected void completeTransactionAfterThrowing(@Nullable TransactionInfo txInfo, Throwable ex) {

        if (txInfo != null && txInfo.getTransactionStatus() != null) {

            if (logger.isTraceEnabled()) {

                logger.trace("Completing transaction for [" + txInfo.getJoinpointIdentification() +

                        "] after exception: " + ex);

            }

            if (txInfo.transactionAttribute != null && txInfo.transactionAttribute.rollbackOn(ex)) {

                try {

                    txInfo.getTransactionManager().rollback(txInfo.getTransactionStatus());

                }

                catch (TransactionSystemException ex2) {

                    logger.error("Application exception overridden by rollback exception", ex);

                    ex2.initApplicationException(ex);

                    throw ex2;

                }

                catch (RuntimeException | Error ex2) {

                    logger.error("Application exception overridden by rollback exception", ex);

                    throw ex2;

                }

            }

            else {

                // We don't roll back on this exception.

                // Will still roll back if TransactionStatus.isRollbackOnly() is true.

                try {

                    txInfo.getTransactionManager().commit(txInfo.getTransactionStatus());

                }

                catch (TransactionSystemException ex2) {

                    logger.error("Application exception overridden by commit exception", ex);

                    ex2.initApplicationException(ex);

                    throw ex2;

                }

                catch (RuntimeException | Error ex2) {

                    logger.error("Application exception overridden by commit exception", ex);

                    throw ex2;

                }

            }

        }

    }

public boolean rollbackOn(Throwable ex) {

        return (ex instanceof RuntimeException || ex instanceof Error);

    }

我们发现它只判断是不是 RuntimeException 或者 Error 的子类,否则的话就直接提交事务了,我们知道除了 RuntimeException 还有平级的异常有 SQLException、IOException,如果是他们的子类异常自然事务就不会回滚了。

所以在阿里的代码规范中就要求必须指名 Exception 的异常回滚类型,因为指定了指定的异常,如果在指定异常的层级下就会回滚.

1.9、未配置事务管理器

还是一种就是不正确的使用传播行为导致的事务失效,我们在下一节具体分析。

最后再补充一个小点点,大家觉得以下的事务会失效吗?

<pre class="prettyprint hljs less" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">@Autowired

    private ICallbackService callbackService;

    @Override

    @Transactional(rollbackFor = Exception.class)

    public void test1() {

        callbackService.test2();

    }

    @Override

    public void test2(){

//        正常插入数据

        baseMapper.insert(new CallbackEntity().setContent("").setAccountId(1));

//        插入失败抛出异常

        baseMapper.insert(new CallbackEntity());

    }

实际上是不会失效的,上面说了,从调用开始 test1 是事务有效的起点,test2 发生异常然后抛出异常,因为是 RuntimeException,异常会不断的往上抛,最终被 test1 的事务所处理。

JAVA面试题分享三百六十:事务@Transactional失效的10种场景 日常开发中,我们经常使用Spring事务,肯定也或多或少的遇到过@Transactional失效的场景,熟悉的小伙伴可能很快的就能找到原因,但是不是很了解的小伙伴可能就要费些功夫排查原因了。那么@Transactional失效的场景都有哪些呢?本章节针对@Transactional的问题,做以下总结整理。1、同一个类中,方法内部调用事务失效2、事务方法被final、static修饰3、当前类没有被Spring管理4、非public修饰的方法(存在版本差异)5、事务多线程调用。 阅读详情

相关推荐

Spring事务失效的9大原因与排查实战

在Java后端开发中,事务管理是保证数据一致性的基石。Spring的声明式事务基于AOP动态代理实现,但许多开发者因对代理机制理解不足,常遇到@Transactional注解失效的诡异问题。自调用、异常被吞、多数据源切换顺序错误等,都可能导致事务静默失效,进而产生数据不一致。理解其底层原理,掌握有效的排查方法,对于构建高可靠应用至关重要。从订单库存到财务对账,事务问题往往出现在复杂业务场景中。结合真实案例,剖析事务失效的常见根因,并给出排查清单与解决方案。

weixin_31569671的博客 204

笔记-事务失效的12种场景

事务失效的场景

weixin_33427346的博客 2317

Spring面试源码级通关:IoC/AOP原理与AI新趋势实战

Spring是Java企业级开发的核心框架,其IoC容器和AOP代理机制构成了现代应用架构的基石。理解Bean生命周期、三级缓存设计、事务代理原理等,本质是掌握Spring如何通过反射、字节码增强与回调机制实现松耦合与横切关注点分离。这些能力不仅决定面试成败,更直接影响高并发、分布式及云原生场景下的系统稳定性与可扩展性。随着Spring Boot自动配置、Spring Security权限演进及Spring AI 2.0对RAG与MCP的原生支持,框架已从传统Web容器升级为AI就绪的声明式开发平台。本文聚

csdndownload11123的博客 445

事务Transactional失效的这10个场景,你一定得知道!

关注公众号:woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

竹林幽深 2021

Web安全入门:九大常见漏洞原理与防御实战指南

在Web应用开发与运维中,安全是构建可靠系统的基石。其核心原理在于理解客户端与服务器之间的信任边界,以及数据在传输与处理过程中可能被恶意利用的环节。从技术价值看,有效的安全防护不仅能保护用户数据和业务资产,更是企业技术信誉与合规性的重要保障。常见的应用场景涉及用户登录、数据交互、文件上传、业务支付等几乎所有在线功能。本文聚焦于SQL注入与跨站脚本攻击(XSS)等基础但危害巨大的漏洞类型,深入剖析其产生机制,并提供从输入验证、参数化查询到内容安全策略(CSP)等工程实践层面的防御方案,旨在帮助开发与运维人员建

java天气 440

华为昇腾 Atlas 200I DK A2 开发板编程接口学习入门:系统安装和开发步骤、注意事项与典型案例实战

华为昇腾开发板编程接口指南:从入门到进阶 本文系统介绍了华为昇腾开发板的编程接口体系,涵盖MindXSDK和AscendCL两大核心框架。MindXSDK提供高层封装接口,适合快速搭建视觉应用;AscendCL则是底层接口,需手动管理设备内存。文章详细讲解了: 开发环境搭建步骤,包括系统配置、依赖安装 MindXSDK组件化编程流程(图像分类实例) AscendCL底层开发方法(内存管理、模型推理) 常见问题解决方案和调试技巧 两个典型应用实例(摄像头目标检测和图像分类) 针对小白开发者,推荐从MindXS

bother3000的博客 2423

事务失效的九大场景

2、@Transactional注解的方法抛出的异常不是spring的事务支持的异常,导致事务失效。4、@Transactional注解所在的类没有被spring管理,导致事务失效。5、try-catch掉异常之后,没有再次抛出,导致事务失效。1、事务方法用非public修饰,导致事务失效。6、方法自身(this)调用问题,导致事务失效。7、数据源没有配置事务管理器,导致事务失效。3、数据表本身不支持事务,导致事务失效。8、传播类型不支持事务,导致事务失效。9、多线程调用,导致事务失效。

weixin_46759297的博客 2122

SAP-MM-PR分配货源并转PO

SAP-MM-PR分配货源并转PO

yanzibing99的博客 5472

Spring事务失效的九大场景与排查实战

在Java后端开发中,数据库事务是保证数据一致性与业务正确性的基石。Spring通过AOP代理机制提供声明式事务管理,让开发者只需添加@Transactional注解即可获得事务能力。然而,注解易用背后隐藏着诸多失效陷阱:同类自调用绕过代理、异常被catch吞掉、受检异常默认不回滚、多线程导致事务资源隔离等,都可能让事务形同虚设。理解事务传播行为与隔离级别,掌握回滚规则与排查方法,是规避线上数据事故的关键。本文系统梳理Spring事务失效的典型场景、回滚细节、传播与隔离级别选型,并结合常见故障给出可落地的团

weixin_29268637的博客 228

第三课 NXP S32K144 MCAL 集成到Vector davinci SIP-第一弹

将NXP S32K144 MCAL 集成到Vector davinci SIP的第三方库,导出ARXMl给Vector davinci SIP使用

candleer的博客 5854

【FPGA教程案例96】控制案例1——基于FPGA的自适应PID控制器verilog实现

首先,我们复习下课程传统的PID控制器,往往存在调整速度较慢,超调过大等缺点。为了解决这个问题,在实际的PID应用中,需要实时的调整PID的控制参数,以达到加快PID控制速度,降低超调等目标。目前,自适应PID控制器,一般有误差反馈调整,模糊控制器调整,神经网络调整。其中模糊控制器调整,神经网络调整较为复杂,在入门案例中不做介绍,在本课程中,我们将实现相对略微简单点的基于误差反馈调整的自适应PID控制器。

FPGA/MATLAB学习教程/源码/项目合作开发 6198

Spring事务失效的九大经典场景与解决方案

在Java企业级开发中,事务管理是保证数据一致性的关键,而Spring的声明式事务通过@Transactional注解和AOP动态代理简化了事务控制。但许多开发者会遇到事务不回滚的困境:代码正常执行,数据库数据却纹丝不动,这往往源于代理调用失效、异常被捕获、回滚规则配错等隐蔽问题。本文系统总结了九大高频失效场景,包括自调用、非public方法、异常吞没、受检异常、存储引擎限制、传播行为误用、多线程上下文隔离等,深入剖析底层原理,并给出最小复现示例和解决方案。掌握这些知识,能显著提升排查效率,避免在事务边界上

weixin_33552698的博客 205

Python 爬虫实战:爬取豆瓣读书评论并分析

摘要:本文以豆瓣读书《活着》评论数据为例,详细讲解Python爬虫开发与文本分析全流程。首先通过requests库爬取评论数据,解决分页、反爬等问题;然后利用BeautifulSoup解析页面提取评论内容、评分等核心信息;最后结合jieba进行关键词提取、snownlp完成情感分析,并通过可视化展示结果。分析显示该书评分以5星为主(占比70%),正面评论达82%,核心关键词为"活着""余华""生命"。全文包含完整代码与详细解析,帮助读者掌握非结构化

2503_91057718的博客 1496

代码审查中的九大技术陷阱:Spring事务、SQL优化、Redis与ES检索

在大型系统长期演进中,一个看似微小的技术选型可能牵动整条请求链路的表现。Spring声明式事务本质是AOP代理增强,理解其边界是排查“事务失效”问题的起点;过滤器与拦截器的职责分层,决定了权限校验和日志逻辑的落点;微服务拆分让跨库JOIN不再可行,SQL优化与Mapper设计成为数据访问的关键;Redis的缓存穿透、击穿和雪崩防护,以及分布式锁的正确用法,则是高并发场景的基础技能。这些概念覆盖从数据访问到服务治理的多个层次,恰恰是后端开发者排查问题的通用思路。围绕订单服务代码审查中的典型案例,梳理Sprin

weixin_29216353的博客 281

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

路~可以走过 3682

路径跟踪 | 图解纯追踪算法Pure Pursuit(附ROS C++/Python/Matlab仿真)

纯追踪算法(Pure Pursuit)参考了人类驾驶行为,其基本思想是在待跟踪路径上设置预瞄点(goal-ahead),通过简单的几何方法驱动机器人跟踪预瞄点直至抵达目标位置.本文详细推导纯追踪算法的理论原理及其变种——自适应纯追踪算法(APP)和规范化纯追踪算法(RPP),并提供ROS C++/Python/Matlab三种仿真实现加深理解

FRIGIDWINTER的博客 8405

Java后端实战:Spring事务、Redis、SQL优化等九大踩坑全解

Java后端开发中,事务管理、缓存一致性和SQL性能是高频难点,而微服务架构的落地更让这些问题交织在一起。Spring事务基于AOP代理机制,自调用或final修饰会导致失效;过滤器与拦截器的执行顺序影响请求链路;Redis分布式锁与缓存更新策略需兼顾原子性与最终一致;SQL优化需结合执行计划设计复合索引;MyBatis-Plus的Wrapper与逻辑删除简化开发但需注意手写SQL的坑;AOP用于日志与权限控制,但切面异常处理可能引发事务回滚。掌握这些基础原理与实战排查方法,能有效提升系统稳定性,本文分享一

weixin_29231725的博客 228

【Scratch考级100图】图01-等级考试scratch绘 画正方形

一、案例介绍 小朋友们应该在数学课或者平时生活中有了解过正方形,正方形在我们生活中到处可见,那我们如果通过Scratch软件来绘制一个正方形呢,我们一起来学习一下吧,在舞台正中央绘制一个边长为200的正方形,要求: 1、围绕舞台中心绘制正多边形,均匀分布在四个象限中 2、正方形边长为200个单位,线条粗细、颜色自定 3、利用画笔绘制正方形,不能有多余的线条 二、案例演示 【Scratch案例演示】Scratch图1-画正方形 三、案例分析 当我们点击小绿旗启动程序后,舞台上会出现一个画

青少年编程学习指导 2667

Spring Boot核心注解全解析与实战指南

注解作为Java企业级开发的核心技术,通过元数据编程显著提升代码可维护性。Spring Boot基于条件装配和自动配置原理,将注解驱动开发发挥到极致,涵盖依赖注入、Web MVC、数据持久化等九大技术场景。在微服务架构中,合理使用@RestController、@Transactional等核心注解可降低30%的配置代码量,而Spring Boot 3.0新增的@HttpExchange和@Observed注解进一步简化了HTTP客户端和可观测性实现。本文系统梳理30个必知注解的实战技巧,包括5个新特性注解

weixin_30684743的博客 482

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring Boot中的设计模式:九大模式实战与底层原理

设计模式并非只存在于面试题中,而是工程实践的通用语言。在Spring Boot框架里,从容器管理到AOP增强,从事件驱动到请求链路,设计模式早已渗透进每个核心机制:默认的单例Bean、ApplicationContext工厂、@Transactional代理、JdbcTemplate模板、@EventListener观察者、HandlerAdapter适配器、过滤器责任链,这些都是模式在真实框架中的落地。理解设计模式的关键,不在于背诵UML图,而在于将概念对应到具体代码。本文从创建型、结构型、行为型三个维度

weixin_33491377的博客 264

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring全栈深度解析与大厂面试实战指南

Spring框架作为Java企业级开发的核心技术栈,其设计思想与实现原理是高级开发者必须掌握的技能。从IoC容器的Bean生命周期管理到AOP的动态代理机制,Spring通过模块化设计实现了轻量级与高扩展性的平衡。在分布式系统架构中,Spring Cloud生态与阿里系中间件(如Nacos、Sentinel)的深度整合,为微服务治理提供了完整解决方案。本文基于大厂面试实战经验,重点解析Spring Bean循环依赖处理、事务管理底层机制等高频考点,并分享从源码阅读到项目落地的系统性学习方法,帮助开发者构建完

weixin_30299709的博客 393

Spring Boot实战:九大设计模式重构订单系统,彻底告别if-else

设计模式是软件工程中经过验证的通用解决方案,而Spring Boot框架本身便是模式的最佳实践场:Bean容器、AOP、事件机制等底层设计处处体现着经典模式的思想。理解这些原理,开发者就能从被动使用框架转为主动运用模式,解决业务代码中的重复、分支爆炸与耦合问题。在订单系统这类真实业务场景中,策略模式可消除支付渠道的if-else分支,模板方法统一订单处理流程,观察者模式解耦通知与主流程,工厂模式管理复杂对象创建,适配器与责任链则分别处理外部SDK差异和多级校验。掌握这些模式的技术价值在于提升代码可维护性与扩

weixin_29219539的博客 109

吃透架构远远不够!看看我们熬夜整理的1000道面试题你就知道了

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。推荐一份Java架构之路必备的学习笔记,内容相当全面!!!成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?

m0_61943758的博客 408

Day499&500&501&502&503&504,BAT大厂最爱问的Java核心面试百题详细解析

选择先更新数据,再删除缓存,再设置之前再删除一次缓存,然后再设置缓存的策略方案注册中心挂了,本地持久化注册中心信息服务挂了,通过配置监控系统来实现对应监控千千万万要记得:多刷题!!多刷题!!之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!篇幅有限,以下只能截图分享部分的资源!!(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)(2)刷的算法题(还有左神的算法笔记)(3)面经+真题解析+对应的相关笔记(很全面)(4)视频学习(部分)

2401_84435166的博客 986

第三篇:SpringMVC——一个HTTP请求在Spring中经历了什么?

SpringMVC采用前端控制器模式,DispatcherServlet作为统一入口。核心流程包含请求接收、Handler映射、拦截器执行、参数解析、方法调用和结果处理。HandlerMapping建立URL到Controller方法的映射,HandlerAdapter解析参数注解(如@RequestParam)。拦截器在预处理和后处理阶段介入,消息转换器处理请求/响应数据格式转换。该架构通过组件协作实现请求到响应的完整处理链路,为开发调试提供理论基础。

2503_90542405的博客 451
上一篇: 那些你不知道的“反射”技术
下一篇: MySQL数据库表的合并及分区
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值