
Spring源码
文章平均质量分 91
Spring源码解析
chugyoyo
微信公众号:源码启示录
展开
-
Spring源码 - Spring AOP底层逻辑详解(万字长文)
AbstractAutoProxyCreator#postProcessAfterInitialization 执行了 AbstractAutoProxyCreator#wrapIfNecessary 方法。if (StringUtils.hasLength(beanName) && this.targetSourcedBeans.contains(beanName)) { // 1. 检查是否为手动指定的 TargetSource Bean(例如通过 @Bean 自定义 TargetSource)原创 2025-04-17 19:29:05 · 639 阅读 · 0 评论 -
Spring源码 - 深度解析@Resource依赖注入的执行逻辑
若未指定 name属性,默认使用字段名或方法名作为 Bean 名称。名称匹配失败后,尝试按类型匹配,结果必须唯一。详细流程如下:1、处理器执行入口@Resource 注入,是在 populationBean 的时候,遍历处理 InstantiationAwareBeanPostProcessor(实例化感知Bean后置处理器)去执行 postProcessProperties,其中就有。原创 2025-04-15 16:39:35 · 827 阅读 · 0 评论 -
Spring源码 - 这才是Spring Bean生命周期
生命周期回调部分其实讲的很透彻,就是实现 InitializingBean#afterPropertiesSet()、DisposableBean#destroy() 就可以实现生命周期的初始化阶段、销毁阶段 控制,而 @PostConstruct、@PreDestroy 与以上两个是等价的,只不过解耦了(毕竟这两个注解是 javax.annotation 包下的,我们甚至可以不依赖 Spring 模块也能实现)。首先,研究是有先后顺序、前置知识的,要了解生命周期,得先知道 Bean 是如何被创建的。原创 2025-04-09 02:33:47 · 952 阅读 · 0 评论 -
Spring源码 - Spring IOC 如何解决循环依赖
我们回到我们的例子,我们先处理的是 1对象(为了直观,之后将 CircleDependent1 简化描述为 1对象) 的逻辑不存在于三级缓存,所以通过 singletonFactory.getObject() 回调到匿名函数(回到前文可看到该匿名函数),调用 createBean 去创建 bean(此时 create ,而不是 get,注意这个差别,意味着这时候才是真正的创建逻辑,毕竟从缓存中没有拿到现有的只能去创建,命名十分合理)。我们知道,递归调用就会有递归调用的算法思路。原创 2025-04-05 00:00:49 · 551 阅读 · 0 评论 -
springboot底层原理之 - @SpringBootApplication 源码精读
注解会被记录到文档;自动配置类本质是 Spring 的 @Configuration 配置类,通过 SpringFactoriesLoader 机制(以本类为键)加载。配置组件扫描规则,用于指定Spring容器在哪些包路径下扫描带有组件注解(如 @Component、@Service等)的类。当使用被 {@code @Inherited} 修饰的注解标注类时,若该类的子类未显式使用该注解,则会自动继承父类的注解。所以,@SpringBootApplication 的属性里都是当前注解的原注解的属性的覆盖。原创 2025-03-14 01:25:59 · 821 阅读 · 0 评论 -
DeferredResult 是如何实现异步处理请求的
最近遇到了一个问题,我们的一个接口需要去轮询另一个第三方接口,导致这个接口占用了太多工作线程,这些工作线程长时间 running,我们需要解决这个问题。于是,我们的方案是:用 DeferredResult 实现接口异步。全文就是探究其原理。原创 2024-08-02 21:41:38 · 1038 阅读 · 0 评论 -
springcloud RocketMQ 客户端是怎么走到消费业务逻辑的 - debug step by step
Springcloud RocketMQ ,一个mq消息发送后,客户端是怎么一步步拿到消息去消费的?我们要从代码层面探究这个问题。原创 2024-07-25 10:59:47 · 595 阅读 · 0 评论 -
springcloud rocketmq 新增的消费者组从哪里开始消费
新增消费者组的时候,消费进度从何处开始消费,问题记录下原创 2024-07-24 14:13:08 · 754 阅读 · 2 评论 -
SpringMVC静态资源发布流程(静态如何从文件加载到Resource,最后传给response,以及其专用处理器ResourceHttpRequestHandler源码深入追究)
SpringMVC 加载静态文件,最后又传给response,说完你可能不信,我追踪了一遍!原创 2022-03-02 20:26:44 · 1275 阅读 · 0 评论 -
HttpRequestHandlerAdapter——SpringMVC中的网络请求处理适配器
我们SpringMVC中,DispatcherServlet拿到请求,先去HandlerMapping找到handler链,然后获取支持这个handler的HandlerAdapter,拿得到的话就执行处理逻辑,然后得到模型视图,再解析视图,渲染。HttpRequestHandlerAdapter这个也是其中的一环。原创 2022-03-02 12:20:44 · 1218 阅读 · 0 评论 -
SpringBoot SpringBootServletInitializer启动原理,如何扫描添加Servlet、ServletContext,内置tomcat原理(源码深入解析)
现在主流的SpringBoot就是基于Servlet的,所以研究Servlet如何加载是很有必要的。原创 2022-03-01 23:10:58 · 2589 阅读 · 0 评论 -
SpringBoot中SpringMVC的DispatcherServlet工作流程?服务发布?源码解析?Servlet监听?Listener?注释翻译?代码详解?与Controller关系?
我们写一个Listener去监听什么是Listener?Listener 即监听器,是servlet 的监听器。随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。当被监视的对象发生情况时,立即采取相应的行动(观察者模式)。主要作用是做一些初始化的内容添加工作、设置一些基本的内容(比如一些参数或者是一些固定的对象)。通过监听器,可以自动激发一些操作。比如:监听在线用户数量等等。我们先实操:import javax.servlet.ServletContext;import ja原创 2022-03-01 17:32:49 · 520 阅读 · 0 评论 -
Java与SpringBoot内置Tomcat源码运行原理与Servlet放置原理解析(org.apache.catalina.startup.Tomcat)
简单使用可以参考这篇文章:https://blog.csdn.net/the_one_and_only/article/details/105177506基本原理就是将Tomcat对象中的Host和Connector中的port设置成相应的host:port,配置Tomcat上下文(环境配置),最后加入Servlet,然后跑起来。Tomcat是这样的:Tomcat源码注释:/** * Minimal tomcat starter for embedding/unit tests. * *原创 2022-02-28 21:15:44 · 800 阅读 · 0 评论