- 博客(31)
- 收藏
- 关注
原创 Dubbo 与 Spring 整合全流程解析(含生产者与消费者
角色核心 Bean主要职责Provider暴露服务、注册服务Consumer引用服务、订阅服务列表、生成代理Registry保存动态服务列表Protocol创建服务端/客户端通讯生成服务接口代理ClusterFailoverCluster 等集群容错Spring XML——> 最终返回代理对象。
2025-11-30 19:00:41
1054
原创 Dubbo 消费者是如何与 Spring 融合的?
阶段Spring 组件Dubbo 组件主要作用Bean 解析将配置解析为 ReferenceBeanBean 实例化调用 get() 创建代理对象连接建立建立与 Provider 的连接调用执行发送请求、接收结果使用实现懒加载代理对象;使用实现注解扫描与注入;将 Dubbo 的服务治理逻辑无缝嵌入到 Spring Bean 生命周期中。得益于这种设计,Dubbo 消费者的使用方式得以简洁优雅,而底层却隐藏着一整套灵活的协议适配、连接管理与代理生成机制。
2025-10-26 17:15:48
785
原创 深入理解 Dubbo 的 ServiceConfig:服务粒度的配置机制
摘要:本文深入分析了Dubbo中ServiceConfig的核心机制,重点探讨其服务粒度的配置体系。ServiceConfig作为服务暴露的最小单元,通过多层继承机制实现配置管理,支持从全局到服务级别的配置合并。文章详细解析了RegistryConfig和ProtocolConfig的继承逻辑,揭示了ConfigManager在配置合并中的关键作用。这种分层配置设计使Dubbo能够兼顾统一性与灵活性,支持不同服务采用差异化配置,为复杂微服务场景提供精细化控制能力。
2025-10-21 00:00:00
723
原创 Dubbo 设计解析:为什么不直接对 Registry 做 SPI,而是抽象出 RegistryFactory?
摘要: Dubbo通过引入RegistryFactory而非直接对Registry做SPI,主要基于以下设计考量:1)避免重复创建注册中心实例,工厂层实现单例复用;2)解耦协议与业务逻辑,Registry专注注册/订阅功能,Factory处理实例化;3)支持动态适配,通过URL协议自动选择实现;4)统一管理生命周期(创建/销毁)。这种分层设计符合单一职责原则,提高了扩展性和资源利用率,例如多个服务共享同一Nacos实例时只需通过工厂获取,避免重复连接。该机制体现了Dubbo SPI的灵活性和面向对象设计思想
2025-10-18 13:00:31
529
原创 Dubbo SPI Wrapper 机制深入解析
本文深入解析了Dubbo框架中的SPI Wrapper机制。SPI(Service Provider Interface)是Dubbo实现组件扩展的核心机制,其中Wrapper机制通过装饰器模式实现功能增强而不修改原始代码。文章详细分析了Protocol接口的Wrapper实现链(如ProtocolFilterWrapper、ProtocolListenerWrapper等),阐述了ExtensionLoader如何自动装配Wrapper调用链的源码实现,包括扫描扩展配置、区分Wrapper类、链式构造实例
2025-10-12 12:37:55
596
原创 Spring 中 REQUIRED 事务的回滚机制详解
Spring的REQUIRED事务传播机制下,所有方法共享同一事务,内部方法抛出的异常即使被外层捕获,仍会导致整个事务回滚。这是因为Spring会标记事务为rollback-only状态,提交时检查该标记决定回滚而非提交。要避免这种"误回滚",可改用REQUIRES_NEW或NESTED传播属性实现更细粒度控制。本文揭示了REQUIRED事务"一荣俱荣、一损俱损"的特性及其底层实现原理。
2025-09-20 13:09:25
924
原创 Dubbo2 与 Dubbo3 的主要区别与演进
Dubbo2:接口级注册,直观但在大规模接口场景下订阅和推送压力过大。Dubbo3:应用级注册 + 元数据服务,将实例信息与接口信息分离,显著降低注册中心压力,更适合大规模、云原生、跨语言的微服务架构。Dubbo2 注册中心是“接口目录”。Dubbo3 注册中心是“应用实例目录”,接口信息由维护。
2025-09-12 21:00:58
546
原创 企业级应用日志规范最佳实践
本文系统阐述了企业级应用开发中的日志规范,从接口调用、业务动作、MQ消费、错误异常、定时任务五个维度提出具体建议。强调日志应具备调试、运维、审计三重价值,要求关键业务动作记录完整变更链条,MQ消费确保消息可追踪,异常处理必须包含上下文和完整堆栈。同时给出日志级别选择策略和最佳实践,如使用traceId贯穿全链路、JSON格式化、采样策略等。最终指出优质日志应平衡信息量与可读性,实现高效问题定位与系统可观测性,避免日志噪音。
2025-09-06 15:59:19
1018
原创 @Autowired 与 @Resource 的区别详解
摘要:本文对比分析了Spring中的@Autowired和@Resource两个依赖注入注解。@Autowired是Spring框架特有,默认按类型注入,支持可选注入和构造器注入;而@Resource是Java标准,默认按名称注入。两者在注入方式、是否必须、适用位置上存在差异:@Autowired更灵活,适合纯Spring项目;@Resource更具兼容性,适合整合Java EE组件。建议根据项目特性合理选择,多实例时需明确指定Bean名称。理解这些差异有助于编写更可靠的依赖注入代码。
2025-07-27 13:39:02
309
原创 java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/zset/Tuple
Linux 环境报很多时候是依赖版本差异或类路径问题导致的。通过分析依赖结构与版本关系,最终将降级到兼容版本,问题得以解决。
2025-05-19 11:22:29
1120
原创 做一款自己的轻量级分库分表组件(二)
在上一篇文章中,我们介绍了开发一款自定义分库分表组件所需涵盖的核心内容。这一篇,我们将正式进入设计与实现阶段。首先要解决的问题是:这款组件应该如何在 application.yml 文件中进行配置,以及这些配置项应如何优雅地映射到 Java 配置类中,便于后续使用与扩展。
2025-05-17 14:01:51
384
原创 Mybatis插件机制的原理
在 MyBatis 中,插件机制是通过 Java 的动态代理机制实现的,其核心在于拦截器(Interceptor)和插件注册机制。插件机制可以用于拦截 MyBatis 核心接口的特定方法,从而实现对执行过程的增强和定制。
2025-05-10 17:21:01
386
原创 Arthas 是如何在类已加载后实现字节码增强的?
JVM 的类生命周期大致分为五个阶段:加载、验证、准备、解析、初始化。一旦类加载完成,JVM 默认不会再次加载同一个类(除非使用不同的 ClassLoader)。是 JVM Instrumentation API 提供的一种能力;只允许修改类的方法体,不允许修改方法签名、字段、继承结构;修改的是HotSpot虚拟机中方法区(或者 JDK 8 后的 metaspace)里的字节码;原有的类加载器、已创建对象均不变。这个过程不影响类的加载状态、也不会重新触发<clinit>
2025-04-30 14:22:00
870
原创 JDK动态代理与CGLIB动态代理完全指南(详细版)
参数说明loader当前使用的类加载器interfaces目标对象实现的接口数组h事件处理器InvocationHandler说明:JDK代理的前提是,目标类必须实现接口!CGLIB(Code Generation Library)通过继承目标类,并在字节码层面生成子类实现代理。JDK代理对象强制转换类型时要小心(只能转成接口类型)。CGLIB创建代理时,构造函数可能引发副作用(比如触发依赖注入)。Spring AOP默认优先使用JDK代理,如果类没有接口,再自动降级到CGLIB。
2025-04-28 17:26:14
1027
原创 深入理解 MyBatis 拦截器:使用方式、拦截种类与实战应用
MyBatis 拦截器(Interceptor)是通过 Java 的插件机制(基于动态代理)实现的一种增强功能。它允许开发者在 MyBatis 的核心执行流程中“插入”自定义逻辑,例如 SQL 执行前后、参数处理、结果映射等阶段。MyBatis 使用注解标识拦截点,通过实现接口来自定义插件。
2025-04-24 21:36:19
808
原创 做一款自己的轻量级分库分表组件(一)
本文从动因出发,分析了分库分表的必要性,结合 Spring 的数据源动态切换机制与 MyBatis 插件机制,构建了一个轻量级的分库分表组件。
2025-04-21 18:57:34
480
原创 一文解析 Maven 的 <optional> 与 <scope>在开发 Starter 时的用法与区别
Maven 的<optional>与<scope>是构建配置中非常重要的两个标签,尤其在开发 Starter 时尤为关键。
2025-04-20 17:00:00
1170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1