Spring 源码分析
文章平均质量分 96
Spring 框架关键源码的阅读分析
谈谈1974
火萎了,我也准备走了
展开
-
SpringBoot 三级缓存解决循环依赖源码分析
针对这个问题,解决方式是借助三级缓存提供提前创建代理对象的触发点,并使用缓存标记目标对象的代理已经创建。笔者提到第三级缓存实际是存放到对象工厂,通过对象工厂的函数式接口来实现获取对象,则此处将触发。则证明已经为目标对象创建过代理对象了,不需要再重新创建,从而避免多个代理对象存在造成的不一致问题。,笔者提到从容器中获取对象时首先是从缓存中获取,则对于创建中的对象 A ,首先将调用。的处理流程中,可能创建出两个不同的 A 对象,违反默认的单例原则。需注意该缓存是为了避免重复创建目标对象的代理对象。原创 2023-06-19 21:00:00 · 1418 阅读 · 0 评论 -
Spring WebMVC 源码分析(5)-注解@RequestMapping的实现原理
文章目录1. 注解 @RequestMapping 的作用2. 源码分析2.1 关键组件的配置2.2 路由映射保存2.3 路由分发1. 注解 @RequestMapping 的作用@RequestMapping 用在方法或者 Controller 上面,其作用是将请求路径 Path 与实际的请求处理方法进行映射,从而完成当请求来临时将其路由到目标处理方法的功能。在 Spring WebMVC 框架的实际处理中,@RequestMapping注解实现功能主要分为以下几步:RequestMapping原创 2021-11-06 16:27:52 · 915 阅读 · 0 评论 -
SpringBoot 注解 @Value 实现源码分析
文章目录前言1. @Value 的源码处理流程2. 源码分析2.1 后置处理器 AutowiredAnnotationBeanPostProcessor 的注册2.2 属性处理器 PropertySourcesPropertyResolver 的注册2.3 @Value 标注字段的依赖处理前言SpringBoot 提供了很多开箱即用的实用工具,比如我们可以使用 @Value 注解获取容器中的配置数据,自动完成属性的赋值,本文即从源码角度来解析 @Value 的实现机制1. @Value 的源码处理流程原创 2021-10-16 18:09:56 · 2144 阅读 · 0 评论 -
MyBatis 拦截器 Interceptor 源码解析
文章目录1. MyBatis 拦截器 Interceptor 介绍2. Interceptor 实现源码分析2.1 拦截器 Interceptor 的注入2.2 拦截器 Interceptor 的应用2.3 拦截器 Interceptor 的生效1. MyBatis 拦截器 Interceptor 介绍MyBatis 提供了基于 Interceptor 的扩展机制,给使用方实现自定义逻辑留下了余地。笔者在 MyBatis @Intercepts 实现打印 SQL 语句 中介绍了拦截器的基本使用,实际原创 2021-09-20 17:56:18 · 1556 阅读 · 0 评论 -
MyBatis-plus 自定义通用方法及其实现原理
文章目录背景1. 自定义通用方法的实现1.1 新增 Mapper 方法与 SQL 语句脚本映射枚举1.2 新增 Mapper 方法的定义类1.3 新增 SQL 注入器1.4 新增配置类将 SQL 注入器添加到容器1.5 新增基类 Mapper2. 实现原理2.1 自定义 SQL 注入器的注入2.2 自定义 SQL 注入器的使用2.3 Mapper 操作数据库的实现背景项目中使用了读写分离的数据库访问框架,这个框架基于 Proxy 模式,对使用方屏蔽了主从数据库,查询时默认路由到从库。但是因为存在主从延迟原创 2021-09-19 13:25:47 · 8554 阅读 · 0 评论 -
Spring 事件监听原理分析
文章目录1. Spring 事件监听介绍2. 源码分析2.1 监听者的注册2.2 事件的发布消费1. Spring 事件监听介绍Spring 框架提供了一套事件发布监听机制,对于开发者来说,只要持有 ApplicationContext 实例就可以发布事件,只要实现 ApplicationListener 接口就可以接收事件并进行处理。一个典型的使用示例如下:自定义事件 NotifyEventpublic class NotifyEvent extends ApplicationEvent {原创 2021-09-12 13:12:09 · 441 阅读 · 1 评论 -
Spring WebMVC 源码分析(4)-Tomcat 服务器启动流程
文章目录1. 前言2. Tomcat 服务器的启动分析2.1 Tomcat 服务器的启动2.2 Filter 过滤器的注入1. 前言在 Spring WebFlux源码分析(1)-服务启动流程 中笔者大致分析了 Spring WebFlux 的启动流程,其实这部分可以说是 SprintBoot 的启动主流程,Spring WebMVC 的启动也由此触发。需要注意的是, Spring WebMVC 框架默认集成 Tomcat 作为底层服务器,如果不指定 WebApplicationType, 那 Abs原创 2021-08-14 13:13:23 · 435 阅读 · 0 评论 -
Spring WebMVC 源码分析(3)-异步请求 DeferredResult 的原理
文章目录1. DeferredResult 简介2. DeferredResult 实现原理1. DeferredResult 简介2. DeferredResult 实现原理原创 2021-06-24 19:28:22 · 3417 阅读 · 6 评论 -
Apollo 客户端集成 SpringBoot 的源码分析(2)-配置属性的注入更新
文章目录前言1. 客户端配置属性注入 SpringBoot 源码分析1.1 Apollo 组件的注入1.2 Apollo 配置属性的更新前言在上一篇文章 Apollo 客户端集成 SpringBoot 的源码分析(1)- 启动时配置获取 中,笔者分析了 Apollo 客户端拉取远端配置并将其嵌入 SpringBoot 的主要流程,本文主要分析 Apollo 配置属性注入 SpringBoot 框架,真正生效的原理1. 客户端配置属性注入 SpringBoot 源码分析Apollo 配置属性注入到 S原创 2021-06-20 12:13:59 · 1122 阅读 · 0 评论 -
Apollo 客户端集成 SpringBoot 的源码分析(1)-启动时配置获取
文章目录1. Apollo 配置中心简介2. 客户端集成 SpringBoot 源码分析2.1 ApolloApplicationContextInitializer 的主要处理2.2 远端配置的拉取1. Apollo 配置中心简介Apollo 是一个开源的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到客户端,适用于微服务配置管理场景。读者如有兴趣可查看官方文档2. 客户端集成 SpringBoot 源码分析Apollo 集成 SpringBoot 的处理大致可原创 2021-06-17 15:31:40 · 1126 阅读 · 6 评论 -
Spring WebFlux 心跳检测最优雅方案及原理
文章目录前言1. Spring WebFlux 心跳检测的实现方案2. Spring WebFlux 定制化配置 Netty 服务器的原理前言小组内使用 Netty 原生框架实现的网关服务既要处理 HTTP 请求又要处理 WebSocket 连接,在使用一个端口进行请求处理时需要区分协议,代码实现非常累赘。笔者研究后将项目切换到了 Spring WebFlux 框架,可以很方便地同时支持 HTTP 请求和 WebSocket 连接,但是其中心跳检测的功能需要移植适配我们知道 Netty 框架自带了一个原创 2021-05-15 21:18:29 · 1712 阅读 · 2 评论 -
SpringBoot 自动配置原理源码分析
文章目录1. 自动配置的实现2. 源码分析1. 自动配置的实现SpringBoot 的自动配置机制为快速开发提供了极大的帮助,众所周知,其采用的是约定优于配置的理念。简而言之,就是把常用的三方工具预先配置好,这样开发人员只要处理好 jar 包依赖,再少量配置核心参数就可以使用三方工具了。既然如此,所谓约定到底是如何约定的,这就是本文需要剖析的以下为 SpringBoot 实现自动配置的源码流程图,其中关于 ConfigurationClassParser 解析配置类的触发路径读者可参考 Spring原创 2021-05-14 20:45:54 · 506 阅读 · 0 评论 -
MyBatis-plus 源码解析
文章目录前言1. Mapper 对象映射至 SQL 语句2. Mapper 操作数据库的实现前言MyBatis-plus是完全基于MyBatis开发的一个增强工具,是在MyBatis的基础上做增强的框架,为简化开发、提高效率而生。它在MyBatis原本的框架上增加了很多实用性功能,比如乐观锁插件、字段自动填充功能、分页插件、条件构造器、sql 注入器等等。使用 MyBatis-plus 可以完...原创 2020-03-14 15:52:34 · 16746 阅读 · 22 评论 -
Spring WebFlux 源码分析(2)-Netty 服务器启动服务流程
文章目录1. 前言2. Netty 服务器启动与服务2.1 Netty 服务器配置启动2.2 Netty 执行服务1. 前言2. Netty 服务器启动与服务2.1 Netty 服务器配置启动2.2 Netty 执行服务原创 2020-11-10 18:26:33 · 3658 阅读 · 0 评论 -
SpringBoot 注解 @Import 的原理-ConfigurationClassPostProcessor 源码解析
文章目录1. @Import 详解1.1 @Import 的作用1.2 @Import 的使用方式2. @Import 注册目标类的流程1. @Import 详解1.1 @Import 的作用1.2 @Import 的使用方式2. @Import 注册目标类的流程原创 2020-07-01 10:37:56 · 2128 阅读 · 0 评论 -
Spring @Aspect 注解创建 AOP 代理对象源码分析
文章目录1. Spring 中代理对象的创建者2. 代理对象创建流程1. Spring 中代理对象的创建者Spring 是基于动态代理实现的 aop,其核心在于代理类增强目标类的功能。这样对于每一个目标类,如何创建其代理对象就极为关键。从源码来看,Spring 中代理对象的创建都离不开AnnotationAwareAspectJAutoProxyCreator,这个类继承了 BeanPostP......原创 2019-12-11 16:52:32 · 1881 阅读 · 0 评论 -
SpringBoot 自动事务管理源码分析
文章目录1. Spring 自动事务管理的实现机制2. Spring 自动事务管理的流程1. Spring 自动事务管理的实现机制2. Spring 自动事务管理的流程原创 2019-12-07 14:58:40 · 1118 阅读 · 2 评论 -
Spring WebFlux 源码分析(1)-服务启动流程
文章目录1. WebFlux 介绍2. WebFlux 服务启动流程1. WebFlux 介绍2. WebFlux 服务启动流程原创 2019-11-26 15:45:57 · 2491 阅读 · 4 评论 -
Spring WebFlux 源码分析(3)-请求处理流程
文章目录1. WebFlux 介绍2. 请求处理1. WebFlux 介绍2. 请求处理原创 2019-11-16 01:16:36 · 2069 阅读 · 0 评论 -
Spring WebMVC 源码分析(2)-从注解@RequestBody开始
文章目录1. 注解@RequestBody 的作用2. Http 请求的参数处理流程3. 自定义协议的解析1. 注解@RequestBody 的作用2. Http 请求的参数处理流程3. 自定义协议的解析...原创 2019-11-16 01:08:15 · 1542 阅读 · 0 评论 -
Spring WebMVC 源码分析(1)-请求处理主流程
文章目录1. 请求处理流程1. 请求处理流程原创 2019-09-12 20:35:41 · 529 阅读 · 0 评论 -
Spring 启动流程源码解析
文章目录1. Spring 启动配置2. Spring 启动流程2.1 Spring 基于 ServletContext 创建 RootContext2.2 Spring servlet 基于 RootContext 创建 WebApplicationContext3. 总结1. Spring 启动配置Spring的启动是基于 servlet 容器的,所有 web工程的初始配置都写在 web....原创 2019-09-12 20:33:51 · 841 阅读 · 0 评论