- 博客(22)
- 收藏
- 关注
原创 java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/zset/Tuple
Linux 环境报很多时候是依赖版本差异或类路径问题导致的。通过分析依赖结构与版本关系,最终将降级到兼容版本,问题得以解决。
2025-05-19 11:22:29
457
原创 做一款自己的轻量级分库分表组件(二)
在上一篇文章中,我们介绍了开发一款自定义分库分表组件所需涵盖的核心内容。这一篇,我们将正式进入设计与实现阶段。首先要解决的问题是:这款组件应该如何在 application.yml 文件中进行配置,以及这些配置项应如何优雅地映射到 Java 配置类中,便于后续使用与扩展。
2025-05-17 14:01:51
330
原创 Mybatis插件机制的原理
在 MyBatis 中,插件机制是通过 Java 的动态代理机制实现的,其核心在于拦截器(Interceptor)和插件注册机制。插件机制可以用于拦截 MyBatis 核心接口的特定方法,从而实现对执行过程的增强和定制。
2025-05-10 17:21:01
303
原创 Arthas 是如何在类已加载后实现字节码增强的?
JVM 的类生命周期大致分为五个阶段:加载、验证、准备、解析、初始化。一旦类加载完成,JVM 默认不会再次加载同一个类(除非使用不同的 ClassLoader)。是 JVM Instrumentation API 提供的一种能力;只允许修改类的方法体,不允许修改方法签名、字段、继承结构;修改的是HotSpot虚拟机中方法区(或者 JDK 8 后的 metaspace)里的字节码;原有的类加载器、已创建对象均不变。这个过程不影响类的加载状态、也不会重新触发<clinit>
2025-04-30 14:22:00
741
原创 JDK动态代理与CGLIB动态代理完全指南(详细版)
参数说明loader当前使用的类加载器interfaces目标对象实现的接口数组h事件处理器InvocationHandler说明:JDK代理的前提是,目标类必须实现接口!CGLIB(Code Generation Library)通过继承目标类,并在字节码层面生成子类实现代理。JDK代理对象强制转换类型时要小心(只能转成接口类型)。CGLIB创建代理时,构造函数可能引发副作用(比如触发依赖注入)。Spring AOP默认优先使用JDK代理,如果类没有接口,再自动降级到CGLIB。
2025-04-28 17:26:14
868
原创 深入理解 MyBatis 拦截器:使用方式、拦截种类与实战应用
MyBatis 拦截器(Interceptor)是通过 Java 的插件机制(基于动态代理)实现的一种增强功能。它允许开发者在 MyBatis 的核心执行流程中“插入”自定义逻辑,例如 SQL 执行前后、参数处理、结果映射等阶段。MyBatis 使用注解标识拦截点,通过实现接口来自定义插件。
2025-04-24 21:36:19
572
原创 做一款自己的轻量级分库分表组件(一)
本文从动因出发,分析了分库分表的必要性,结合 Spring 的数据源动态切换机制与 MyBatis 插件机制,构建了一个轻量级的分库分表组件。
2025-04-21 18:57:34
426
原创 一文解析 Maven 的 <optional> 与 <scope>在开发 Starter 时的用法与区别
Maven 的<optional>与<scope>是构建配置中非常重要的两个标签,尤其在开发 Starter 时尤为关键。
2025-04-20 17:00:00
931
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人