自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(305)
  • 收藏
  • 关注

原创 【12.MyBatis源码剖析与架构实战】7. 嵌套⼦查询执⾏流程剖析

MyBatis嵌套查询执行机制解析 摘要:MyBatis通过两种方式实现嵌套查询:嵌套查询(多次SQL执行)和嵌套结果映射(单次JOIN+内存映射)。核心处理流程在DefaultResultSetHandler中完成,分别通过getNestedQueryMappingValue和分组机制实现。对于循环依赖问题,MyBatis采用一级缓存占位符和延迟加载队列机制巧妙解决。实践建议:数据量小用JOIN方式,结构复杂用SELECT+延迟加载,注意配置<id>标签优化分组性能。两种方式各有优劣,需根据具

2025-10-17 19:59:13 570

原创 【12.MyBatis源码剖析与架构实战】6.3 对嵌套结果的处理

MyBatis嵌套结果映射解析:原理与源码实现 MyBatis提供了两种处理嵌套映射的方式:联合查询(单条SQL)和嵌套查询(多条SQL)。联合查询通过JOIN获取数据并在内存映射,适合数据量小的场景;嵌套查询支持延迟加载,适合复杂关系。核心处理流程在DefaultResultSetHandler中完成,通过解析结果集、创建对象、填充属性和处理嵌套关系等步骤实现。关键点在于利用rowKey进行对象匹配和去重,确保集合属性正确映射。对于嵌套查询,MyBatis使用动态代理实现延迟加载。开发者应根据数据量和性能

2025-09-27 10:04:09 614

原创 【12.MyBatis源码剖析与架构实战】6.2 非嵌套结果映射

MyBatis非嵌套结果映射的核心流程包括:通过DefaultResultSetHandler处理ResultSet,使用ResultSetWrapper缓存元数据,结合自动映射和手动映射两种方式填充POJO属性。自动映射根据列名匹配属性名,手动映射则依据ResultMap配置,两者都通过TypeHandler进行类型转换,并借助MetaObject反射设置属性值。关键组件包括ResultSetHandler、ResultMap、TypeHandler和MetaObject等,共同完成数据库结果集到Java

2025-09-12 20:17:08 1129

原创 【12.MyBatis源码剖析与架构实战】6.1 案例

MyBatis的结果集处理流程剖析 本文通过一个完整的用户查询系统案例,详细解析了MyBatis如何将数据库记录转换为Java对象的过程。案例包含环境搭建、数据库设计、实体类定义、Mapper配置和测试代码,重点展示了ResultSetHandler的核心处理流程。 关键流程:1)执行SQL获取ResultSet;2)ResultSetHandler根据resultMap创建结果对象;3)将列值映射到对象属性;4)返回组装好的对象。该流程通过清晰的序列图呈现,突出ResultSetHandler在结果集转换

2025-09-11 22:28:48 1125

原创 【12.MyBatis源码剖析与架构实战】 5.5 插⼊、更新和删除操作

MyBatis 增删改操作源码执行流程分析 摘要: 本文深入剖析了 MyBatis 中 insert、update 和 delete 操作的源码执行机制。虽然这些操作不返回结果集,但其核心执行路径与查询操作高度相似,均通过 StatementHandler 处理。关键流程包括:1)Executor 委托执行;2)StatementHandler 创建预处理语句;3)ParameterHandler 参数绑定;4)执行更新并处理返回结果。特别值得注意的是主键生成机制,MyBatis 通过 KeyGenerat

2025-09-09 18:07:30 773

原创 【12.MyBatis源码剖析与架构实战】 5.4 查询操作

MyBatis执行SQL查询的核心流程是通过StatementHandler组件与JDBC交互的。文章通过序列图展示了从Executor到StatementHandler的完整调用链,重点分析了PreparedStatementHandler处理预编译SQL的过程。源码层面详细解读了三个关键步骤:1)根据MappedStatement创建特定类型的StatementHandler;2)准备Statement对象并设置参数;3)执行查询并处理结果集。其中,parameterize()方法通过Parameter

2025-09-08 22:31:40 1018

原创 【12.MyBatis源码剖析与架构实战】 5.3 SQL语句的参数化操作

MyBatis SQL参数化机制源码解析:从Mapper代理到PreparedStatement的完整链路。核心流程包括:1)MapperProxy动态代理将方法调用转至SqlSession;2)Executor获取BoundSql并委托StatementHandler处理;3)PreparedStatementHandler通过ParameterHandler实现最终参数绑定,其中DefaultParameterHandler遍历ParameterMapping完成预编译参数设置。重点揭示了#{}与${}

2025-09-07 09:19:13 745

原创 【12.MyBatis源码剖析与架构实战】 5.2 获取Statement对象

MyBatis获取Statement对象的源码流程解析 MyBatis通过Executor和StatementHandler等核心组件协作完成Statement对象的获取过程。主要流程如下: SqlSession将操作委托给Executor执行 Executor通过Configuration创建StatementHandler StatementHandler负责实际的Statement创建和参数设置 关键点: 使用RoutingStatementHandler根据statementType选择具体实现 通

2025-09-05 08:15:20 707

原创 【12.MyBatis源码剖析与架构实战】5.1StatementHandler体系剖析-整体设计

职责分离 (Single Responsibility)负责管理 Statement 的生命周期和执行。只负责参数处理。只负责结果映射。这种设计使得每个组件功能内聚,易于理解和维护。策略模式 (Strategy Pattern)根据配置选择不同的策略(SimplePreparedCallable),使得 SQL 执行方式的切换变得非常灵活。装饰器模式/动态代理 (Decorator Pattern / Dynamic Proxy)插件机制通过动态代理包装。

2025-09-04 08:29:21 1006

原创 【12.MyBatis源码剖析与架构实战】4.2 注解⽅式Mapper的解析过程

MyBatis注解方式Mapper解析过程通过MapperAnnotationBuilder实现,核心步骤包括:1)注册Mapper接口并创建代理工厂;2)优先加载同名XML配置;3)解析类级别缓存注解;4)遍历方法并构建MappedStatement。关键方法parseStatement()会从方法注解提取SQL语句、参数类型和返回类型,最终通过MapperBuilderAssistant创建可执行的数据库操作映射。整个过程实现了Java接口方法与SQL语句的无缝转换,支持XML与注解混合配置。

2025-09-04 08:14:51 814

原创 【12.MyBatis源码剖析与架构实战】4.1 XML配置⽅式Mapper的解析过程

MyBatis XML配置解析过程详解:从SqlSessionFactoryBuilder.build()开始,XMLConfigBuilder解析主配置文件,mapperElement()处理Mapper配置。XMLMapperBuilder解析单个Mapper文件,包括namespace绑定、缓存、结果映射等。SQL语句由XMLStatementBuilder解析,通过configurationElement()处理各元素。整个过程将XML配置转换为可执行的Java对象,构建完整的MyBatis运行环境

2025-09-03 18:59:43 293

原创 【12.MyBatis源码剖析与架构实战】4. MappedStatement解析过程剖析

MyBatis的核心组件MappedStatement封装了SQL语句的所有执行信息。其解析过程主要包括:1)XML/注解配置入口识别;2)XMLMapperBuilder解析mapper标签及其子元素;3)XMLStatementBuilder处理语句属性、include/selectKey标签;4)创建动态/静态SqlSource;5)最终构建不可变的MappedStatement对象并注册到Configuration。解析过程涉及命名空间管理、SQL片段复用、动态SQL处理等关键环节,通过建造者模式确

2025-09-03 18:55:13 1069

原创 【12.MyBatis源码剖析与架构实战】3.Configuration解析过程剖析

本文详细剖析了MyBatis核心配置类Configuration的构建过程。首先回顾了MyBatis的标准使用步骤,重点分析了SqlSessionFactoryBuilder.build()方法的内部实现。通过建造者模式,XMLConfigBuilder作为核心解析器,按照固定顺序解析mybatis-config.xml中的各个配置节点,包括属性、类型别名、插件、环境配置等。特别强调了配置解析的顺序重要性,以及环境与数据源的解析过程。最终构建完成的Configuration对象包含了所有配置信息,并用于创建

2025-09-03 07:32:13 1184

原创 【12.MyBatis源码剖析与架构实战】2.3 MyBatis执⾏CRUD时

MyBatis执行CRUD操作的核心流程涉及多个组件的协作:首先通过动态代理拦截Mapper接口调用,查找对应的MappedStatement;然后由SqlSession委托Executor执行,Executor会先检查二级缓存,未命中时通过StatementHandler处理SQL语句,ParameterHandler设置参数,最终由ResultSetHandler处理结果集并返回。不同类型的操作(查询/更新)在缓存处理和结果返回上有所差异,整个流程体现了MyBatis将JDBC操作封装为对象化操作的设计

2025-09-02 18:19:28 1176

原创 【12.MyBatis源码剖析与架构实战】2.2 MyBatis初始化时

MyBatis初始化过程详解:首先加载并解析全局配置文件(mybatis-config.xml)和Mapper文件,创建包含所有配置的Configuration对象。关键步骤包括解析properties、settings等元素,处理Mapper配置(XML或注解),注册MappedStatement。最后通过SqlSessionFactoryBuilder创建DefaultSqlSessionFactory。整个过程采用延迟验证机制,支持插件拦截器链,并动态代理Mapper接口。初始化日志可清晰展示各阶段的

2025-09-02 18:14:49 1002

原创 【12.MyBatis源码剖析与架构实战】2.1 案例

本文提供了一个完整的MyBatis与Log4j整合的Java项目示例,包含项目结构、依赖配置、配置文件和实体类实现。项目采用Maven管理,核心内容包括:MyBatis配置文件设置了LOG4J日志实现和MySQL数据源;Log4j配置文件定义了控制台输出格式和SQL跟踪级别;User实体类展示了基本的POJO结构。这个示例为开发者提供了可直接运行的MyBatis+Log4j整合基础框架,便于快速搭建数据访问层并实现详细的日志记录功能。

2025-09-02 18:10:50 1012

原创 【12.MyBatis源码剖析与架构实战】1. MyBatis架构设计

MyBatis采用三层架构设计:接口层接收请求(支持Statement ID和Mapper接口两种调用方式),数据处理层是核心引擎(包含SQL解析、参数映射、SQL执行和结果处理四大组件),框架支撑层提供基础服务(事务管理、连接池、缓存等)。整个架构层次清晰,组件职责单一,通过动态代理和拦截器机制实现高度灵活性。查询请求依次经过各层组件处理,最终完成ORM映射并返回结果。这种分层设计使得MyBatis在保持强大功能的同时具备良好的扩展性和可维护性。

2025-09-02 18:05:23 910

原创 【9.Tomcat底层剖析与性能优化】7、自定义tomcat

本文详细介绍了如何实现一个简化版Tomcat服务器(CodingTomcat)的主要步骤和核心代码。内容包括:1)项目结构搭建,2)主类CodingTomcat的实现,负责服务器启动、线程池管理和请求分发;3)Request类的实现,用于解析HTTP请求信息。核心功能包括端口监听、多线程处理、Servlet映射配置和请求解析等Tomcat基本特性,代码结构清晰,适合学习Web服务器工作原理。

2025-09-01 07:44:41 947

原创 【9.Tomcat底层剖析与性能优化】6.2.3 线程池优化

Tomcat线程池优化指南:通过合理配置线程池参数可显著提升应用性能。核心参数包括maxThreads(建议CPU核心数1-4倍)、minSpareThreads(maxThreads的10%-20%)、acceptCount(maxThreads的1-2倍)等。优化需区分CPU密集型和I/O密集型任务,建议启用NIO连接器、预启动线程(prestartminSpareThreads)并进行压力测试。关键要结合监控工具(JConsole/Prometheus)和性能测试结果持续调整,避免盲目增加线程数导致性

2025-09-01 07:31:49 1318

原创 【9.Tomcat底层剖析与性能优化】6.2.2 连接优化

本文深入探讨了Tomcat连接优化的关键配置。重点解析了NIO连接器的核心参数,包括maxThreads(建议根据QPS和响应时间计算)、acceptCount(缓冲队列设置)和maxConnections(最大连接数限制)。文章还强调了压缩配置(compression)对性能提升的重要性,以及与前端代理(如Nginx)配合时的长连接优化。最后指出JVM参数调优是连接稳定的基础,建议设置统一堆内存大小并使用G1GC收集器。这些优化措施能显著提升Tomcat的并发处理能力和资源利用率。

2025-09-01 07:26:52 845

原创 【9.Tomcat底层剖析与性能优化】6.2.1 JVM优化

本文深入探讨了Tomcat性能优化中的JVM优化策略,主要包括以下核心内容:JVM优化的三大目标(低延迟、高吞吐量和最小内存占用)及其权衡关系;关键优化参数配置,如堆内存设置、垃圾收集器选择(包括Parallel GC、CMS GC、G1 GC及JDK11+的ZGC/Shenandoah)、元空间设置和线程栈大小调整;以及必要的诊断工具配置(GC日志和内存溢出快照)。文章最后提供了一个完整的JVM优化配置示例,适用于8核16GB服务器的典型Spring Boot Web应用场景,涵盖了堆内存、垃圾收集器、元

2025-08-31 11:58:57 1314

原创 【9.Tomcat底层剖析与性能优化】6.1 Tomcat性能测试

本文详细介绍了Tomcat性能测试的完整流程。首先明确测试目标(容量规划、瓶颈识别等),并列出关键性能指标(吞吐量、响应时间等)。推荐使用JMeter等工具进行测试,并强调测试环境隔离的重要性。文章提供了Tomcat调优配置建议,包括JVM参数和连接器设置。以JMeter为例,逐步说明测试计划创建、运行和分析方法。最后总结常见性能问题及优化方向,强调测试是一个"准备-测试-分析-优化"的迭代过程,建议基于数据谨慎调整配置。

2025-08-31 11:53:27 1489

原创 【9.Tomcat底层剖析与性能优化】5.2 JSP编译方式

本文深入探讨了Tomcat中JSP页面的两种编译方式:运行时编译和预编译。运行时编译是默认模式,当首次访问JSP页面时触发,通过Jasper组件将JSP转换为Servlet源代码再编译为字节码。预编译则在部署前完成,避免生产环境首次访问延迟。文章详细解析了运行时编译的源码流程,包括JspServlet处理请求、JspServletWrapper检查编译条件、JspCompilationContext管理编译过程,以及Compiler完成JSP到Java代码再到字节码的转换。其中重点分析了开发模式下文件过期检

2025-08-31 11:38:56 1095

原创 【9.Tomcat底层剖析与性能优化】5.1 Jasper简介

Jasper是Tomcat内置的JSP引擎,负责将JSP文件转换为Java Servlet类。其核心工作流程包括:通过JspServlet接收请求,由JspServletWrapper管理编译状态,再经JspCompilationContext和Compiler完成代码转换和编译。Jasper支持开发模式检测、标签池化等特性,生产环境中建议关闭开发模式并考虑预编译优化性能。从源码看,Jasper通过高效的翻译和编译机制,使JSP能在Tomcat中高效运行,是理解Tomcat处理动态网页的重要组件。

2025-08-31 11:34:16 1095

原创 【9.Tomcat底层剖析与性能优化】4.3 创建Server

Tomcat启动时通过Bootstrap类初始化Catalina环境,创建Digester解析server.xml配置文件。解析过程采用分层规则:首先创建Server实例,然后处理其子元素Service、Connector和Engine。Digester通过预定义的XML元素匹配规则,使用反射机制动态创建各组件对象并建立层级关系。整个流程体现了Tomcat基于配置文件构建容器架构的设计思想,为后续请求处理奠定基础。

2025-08-30 10:42:27 637

原创 【9.Tomcat底层剖析与性能优化】4.2 Digester

摘要:Catalina(Tomcat核心容器)使用Digester库解析配置文件(如server.xml),将其转换为内存中的Java对象结构。Digester作为规则驱动的XML解析工具,自动执行预定义规则,创建并组装对象树,避免了繁琐的手动解析代码。Catalina利用Digester初始化容器层次(Server/Service/Engine/Host等),并解析web.xml等其他配置。这种设计实现了配置与代码的解耦,提高了灵活性和可扩展性,简化了开发流程,是Tomcat模块化架构的关键基础。

2025-08-30 10:33:16 742

原创 【9.Tomcat底层剖析与性能优化】4.1 Catalina容器结构

本文深入解析Tomcat的核心组件Catalina容器的层次结构与工作原理。Catalina采用模块化设计,由Server、Service、Connector、Engine、Host、Context和Wrapper七层容器组成,形成责任链式请求处理流程。各组件职责明确:Server代表整个实例,Service组装Connector和Engine,Connector处理网络通信,Engine路由请求,Host管理虚拟主机,Context对应Web应用,Wrapper处理具体Servlet。通过Pipeline

2025-08-30 10:07:20 758

原创 【9.Tomcat底层剖析与性能优化】3.3 Tomcat 类加载器层次

Tomcat 的类加载机制采用分层设计,实现了 Web 应用隔离与资源共享。其核心包括 Common ClassLoader(加载共享库)和 WebApp ClassLoader(每个应用独立实例)。不同于 Java 标准的双亲委派模型,Tomcat 采用"应用优先"策略:WebApp ClassLoader 会先尝试自行加载应用内类,失败后才委托父加载器。这种设计支持应用使用自带的库版本,同时通过 Common ClassLoader 共享基础库(如 Servlet API)。此外,J

2025-08-30 10:00:13 1083

原创 【9.Tomcat底层剖析与性能优化】3.2.3 加载类

Tomcat通过自定义类加载器打破双亲委派模型,实现Web应用隔离。其核心类WebappClassLoaderBase的loadClass方法优先加载WEB-INF下的本地类,再根据delegate标志决定是否委托父加载器。默认delegate=false采用"子优先"策略,确保应用独立性;特殊场景可设为true恢复"父优先"。Tomcat的多层类加载器结构(Bootstrap→System→Common→Webapp)既隔离应用又共享核心库,支持热部署。这种设计平衡

2025-08-29 08:01:14 841

原创 【9.Tomcat底层剖析与性能优化】3.2.2 查找类

Tomcat通过自定义类加载器WebappClassLoader打破双亲委派模型,实现Web应用隔离。其核心在于重写findClass和loadClass方法:findClass负责从WEB-INF目录加载应用私有类,loadClass协调加载流程。这种设计既保证应用隔离性(优先加载自身类),又通过Common类加载器共享公共资源,同时防止覆盖核心类,实现了灵活性、安全性和资源复用的平衡。Tomcat并非完全抛弃双亲委派,而是根据容器需求进行有选择的调整。

2025-08-29 07:57:06 770

原创 【9.Tomcat底层剖析与性能优化】 3.2.1 Tomcat加载器理念

Tomcat类加载器设计理念剖析:在保证Java安全模型的前提下,通过打破传统双亲委派模型,实现Web应用间严格隔离、可控共享和热部署。核心包括:1)应用隔离性原则,为每个Web应用创建独立WebappClassLoader;2)可控共享性原则,采用层次化结构实现分层共享;3)灵活可配置原则,通过delegate参数控制加载顺序;4)热部署原则,利用类加载器生命周期实现应用热更新。这些设计理念通过精妙的架构落地,形成了Tomcat高效健壮的多应用托管能力,体现了"在规则中寻求突破"的哲学

2025-08-29 07:52:46 833

原创 【9.Tomcat底层剖析与性能优化】 3.1 JavaSE标准类加载器

Tomcat类加载机制的核心是双亲委派模型,它通过Bootstrap、Extension和Application三个标准类加载器构成层次结构。Tomcat在此基础上扩展出自定义加载器体系,实现Web应用隔离:Common ClassLoader共享Tomcat核心类,每个Web应用独享WebappX ClassLoader优先加载自身类,仅在找不到时委派父加载器。这种设计既保证核心Java类的唯一性,又支持多应用灵活部署,通过调整委派规则(子优先)实现应用级隔离,同时尊重标准加载器的安全性和稳定性。

2025-08-29 07:34:39 626

原创 【9.Tomcat底层剖析与性能优化】 2.5 Catalina启动源码

Tomcat 启动过程的核心在于 Catalina 类,它负责解析配置、初始化组件并管理生命周期。通过 load() 方法创建 Digester 解析器处理 server.xml,构建 Server、Service 等组件实例并调用初始化链。start() 方法按顺序启动 Engine、Executor 和 Connector,确保服务就绪后才开放端口。整个过程采用 Lifecycle 接口统一管理,支持事件监听和有序状态转换,最后通过 await 机制等待 SHUTDOWN 命令实现优雅关闭。这种分层启动

2025-08-28 07:41:57 886

原创 【9.Tomcat底层剖析与性能优化】2.4 BootStrap主入口

Tomcat启动入口Bootstrap类深度解析 摘要:本文深入剖析Tomcat启动的核心入口Bootstrap类,揭示其作为JVM执行起点的关键作用。Bootstrap主要承担四大职责:1)构建复杂的类加载器体系,实现容器与Web应用的隔离;2)通过反射加载Catalina类;3)委托处理启动/停止命令;4)守护主线程运行。文章重点解析了类加载器隔离机制的设计必要性,通过时序图详细展示了从JVM启动到Catalina接管的完整流程,并深入解读了initClassLoaders()方法创建的三层类加载器架构

2025-08-28 07:38:14 1251

原创 【9.Tomcat底层剖析与性能优化】2.3 启动入口脚本

本文深入解析了Tomcat的启动入口脚本机制,重点介绍了核心脚本文件(startup.sh、catalina.sh、setenv.sh等)的作用和执行流程。详细说明了脚本如何设置环境变量、构建Java命令并最终启动Tomcat服务,特别强调了setenv.sh作为用户自定义配置的最佳实践。文章还提供了关键环境变量说明和实用技巧,如前台启动调试、远程调试配置等。通过理解这套脚本链条,用户可以更有效地管理和定制Tomcat实例。

2025-08-28 07:32:57 1017

原创 【9.Tomcat底层剖析与性能优化】2.2 时序图

Tomcat启动过程分为初始化与启动两大阶段。初始化阶段自上而下解析server.xml并实例化组件(Server→Service→Connector/Engine→Host→Context),其中Context初始化会创建类加载器并解析配置。启动阶段自下而上调用start()方法,核心环节包括Connector启动线程池和端口监听,以及Context部署阶段解析web.xml、初始化Servlet/Filter/Listener。整个过程通过Lifecycle接口统一管理,实现组件化协同启动。

2025-08-28 07:29:36 999

原创 【9.Tomcat底层剖析与性能优化】2.1 简要流程

Tomcat启动流程详解:从Bootstrap引导到组件初始化与启动。核心流程包括:1)通过Bootstrap创建类加载器并初始化Catalina;2)Catalina解析server.xml配置,构建Server组件层次结构;3)自上而下初始化组件(Server→Service→Connector→Engine→Host→Context);4)启动各组件,关键步骤是Connector绑定端口开始监听请求;5)Server进入等待状态,服务就绪。整个过程严格遵循生命周期模型和层次结构,确保各组件有序初始化和

2025-08-27 08:21:40 1208

原创 【9.Tomcat底层剖析与性能优化】1.4.2 核心组件的关联

Tomcat核心组件间存在严格的层次化嵌套结构和生命周期管理关系。主要体现为:1) Server包含多个Service,每个Service绑定Connector和Engine;2) Engine->Host->Context->Wrapper形成父子容器链,负责请求路由;3) 所有组件实现统一生命周期接口,父组件管理子组件的启动停止。这种设计使Tomcat具备模块化、灵活可靠的特点,支持从连接处理到业务逻辑执行的完整链条,是理解其架构和性能调优的基础。

2025-08-27 08:09:03 695

原创 【9.Tomcat底层剖析与性能优化】1.4.1 核心组件说明

Tomcat 是一个 Servlet 容器,其核心架构由连接器(Connector)和容器(Container)组成,采用分层嵌套的组件设计。主要组件包括:Server(代表整个实例)、Service(绑定连接器和容器)、Connector(处理网络通信)、Container(包含Engine、Host、Context和Wrapper四个层次)。请求处理流程遵循"Connector接收→Engine路由→Host匹配→Context处理→Wrapper执行Servlet"的链条。各组件通

2025-08-27 08:02:09 359

原创 【9.Tomcat底层剖析与性能优化】1.3.3 重用性:LifeCycleBase 抽象基类

Tomcat 中 LifecycleBase 抽象基类通过模板方法模式实现了卓越的代码重用性。它将生命周期管理的通用逻辑(状态检查、转换和事件触发)封装在基类的 final 方法中,而将可变逻辑(组件特定行为)交由子类实现。这种设计带来多重优势:消除冗余代码、保证组件行为一致性、实现关注点分离、提高可维护性,并降低开发新组件的成本。几乎所有 Tomcat 核心组件都继承自这个类,使其成为 Tomcat 架构中重用性的典范。

2025-08-26 08:26:51 563

SpringMVC整合spring security实现登录、验证码、记住我

该项目基于 SpringMVC 框架整合 Spring Security 安全框架,实现 Web 应用的认证授权功能。通过 Spring Security 提供的安全机制,对系统资源进行保护,实现用户登录认证、角色权限管理、记住我功能及请求拦截等安全控制,同时结合 SpringMVC 实现 MVC 分层架构,提供完整的 Web 应用开发解决方案。

2025-09-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除