后端框架源码专栏
文章平均质量分 82
源码解读,含Spring,SpringMVC,SpringBoot,SpringCloud,Netty,Mybatis,RocketMQ,Dubbo,Tomcat等等
小新杂谈社
积极乐观,不畏困难,敢于拼搏,能快速适应环境!
展开
-
RocketMQ 生产者启动流程
该文所涉及的 RocketMQ 源码版本为 4.9.3。原创 2024-06-22 15:15:00 · 185 阅读 · 0 评论 -
RockerMQ Nameserver 如何与 Broker 进行通信的?
该文所涉及的 RocketMQ 源码版本为 4.9.3。原创 2024-06-22 07:30:00 · 608 阅读 · 0 评论 -
RocketMQ MappedFile 内存映射文件详解
该文所涉及的 RocketMQ 源码版本为 4.9.3。原创 2024-06-21 15:45:00 · 259 阅读 · 0 评论 -
RocketMQ IndexFile 详解
该文所涉及的 RocketMQ 源码版本为 4.9.3。原创 2024-06-21 08:15:00 · 987 阅读 · 0 评论 -
RocketMQ 消费者启动流程
该文所涉及的 RocketMQ 源码版本为 4.9.3。原创 2024-06-20 13:30:00 · 464 阅读 · 0 评论 -
RocketMQ 消息消费流程
该文所涉及的 RocketMQ 源码版本为 4.9.3。拉取消息 成功之后 会调用 org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService#submitConsumeRequest 组装 消费消息 请求获取 consumeMessageBatchMaxSize,表示一个 ConsumeRequest 包含的消息 数量,默认为 1入参 msgs 为拉取消息的最大值,默认为 32如果 msgs 小于等于 consume原创 2024-06-19 14:00:00 · 391 阅读 · 0 评论 -
RocketMQ CommitLog 详解
该文所涉及的 RocketMQ 源码版本为 4.9.3。原创 2024-06-19 08:00:00 · 466 阅读 · 0 评论 -
Nacos 服务注册
找到类两个流程将注解的属性读取,放入到 nacos 的全局属性配置中bean 注入。原创 2024-06-18 14:00:00 · 1774 阅读 · 0 评论 -
一个简单的 Servlet 容器代码设计
Servlet 算是 Java Web 开发请求链路调用栈中底层的一个技术,当客户端发起一个请求后,到达服务器内部,就会先进入 Servlet(这里不讨论更底层的链路),SpringMVC 的请求分发核心也是一个 Servlet,名叫,一个请求首先会进入到这个 Servlet,然后在通过 SpringMVC 的机制去分发到对应的 Controller 下。但是再往上一层说,普通的开发人员可能不会关心 Servlet 是怎么被调用的,我们只要写一个。原创 2024-06-18 08:00:00 · 1491 阅读 · 0 评论 -
Servlet原理分析
Servlet(Server Applet)是 J2EE 的内容之一,由 Java 编写的服务器端小程序。它是 web 请求的入口,主要功能在于交互式地(Request 和 Response)浏览和修改数据,生成动态 Web 内容。Servlet 运行于支持 Servlet 的 WEB 容器中,如 Tomcat。从实现上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议 的 Web 服务器。客户端发送请求至 WEB 服务器;原创 2024-06-17 15:52:50 · 722 阅读 · 0 评论 -
Spring Cloud OpenFeign 介绍
是一个声明式的 Web 服务客户端,它使 Java 编写 Web 服务客户端变得更加容易。其实就是通过 JDK 代理生成接口的代理对象,方法的执行就是执行 Http 请求。而 OpenFeign 的作用是通过自动装配将 Feign 集成到应用程序中。原创 2024-06-17 15:49:28 · 681 阅读 · 0 评论 -
Spring Cloud Gateway 介绍
GatewayControllerEndpoint 和 GatewayLegacyControllerEndpoint 是由注册的,默认是注册 GatewayControllerEndpoint ,可以设置属性变成让 GatewayLegacyControllerEndpoint 生效。原创 2024-06-13 15:30:00 · 987 阅读 · 0 评论 -
Spring Cloud 介绍
SpringCloud 是在 SpringBoot 的基础上构建的。Spring Cloud 以两个库的形式提供了许多特性:Spring Cloud Context 和 Spring Cloud Commons。Spring Cloud Context 为 SpringCloud 应用程序的 ApplicationContext 提供扩展机制(引导上下文、加密、刷新属性和环境端点)。原创 2024-06-11 14:30:00 · 1337 阅读 · 0 评论 -
ConfigurationProperties
/ 创建 ConfigurationPropertiesBean。配置信息到此绑定成功,关于如何处理集合相关的配置请各位读者自行学习。// 判断是否存在这个beanName。// 需要读取的配置信息的key。// 获取具体的一个属性值。// 判断是否是需要的方法。// 配置属性Bean注册器。// 属性绑定后置处理器。// 获取bean定义。// 忽略错误的绑定处理器。// 未绑定元素处理器。源码开始,先找出刚才的对象。// 信息的value。// 获取校验接口列表。// 校验绑定处理器。原创 2024-06-07 16:38:18 · 528 阅读 · 0 评论 -
ConditionalOnBean
/ 获取 AutoConfigurationImportFilter 相关配置。// 从beanFactory 中获取忽略的类 返回beanNanme。* 循环,忽略的类型, 将类型从 beanFactory 获取,返回。// 从 beanFactory 中获取忽略的beanNames。// 注解匹配删除忽略的beanname。// 把注解解析出来获得文本。// 通过类型获取 beanName。// 把注解解析出来获得文本。// 通过类型获取 beanName。// 执行 aware 相关接口。原创 2024-06-13 08:45:00 · 953 阅读 · 0 评论 -
IO 及基本概念
Java 中的 socket.read()会调用 native read(),而 Java 中的 native 方法会调用操作系统底层的 dll,而 dll 是 C/C++编写的,图中的 recvfrom 其实是 C 语言 socket 编程中的一个方法。对于阻塞与非阻塞,阻塞的实时响应性更好,但在高并发情况下阻塞线程数会急剧增加,导致大量的上下文切换会引起挂起/唤醒线程的性能损耗,而非阻塞的性能吞吐量更高,但由于其是顺序执行每一个事件,一旦处理某一个事件过久,会影响后续事件的处理,因此实时响应性较差。原创 2024-06-13 11:30:00 · 642 阅读 · 0 评论 -
SpringBoot 启动方法
通过 spring 的源码我们知道这个方法是根据。是 spring 提供的方法,主要目的是读取。看一下最终设置完成后的 context。刷新上下文之后做的事情,空的没有实现。的数字大小进行排序,观察。子类的具体实现不展开了。原创 2024-06-07 14:00:00 · 1052 阅读 · 0 评论 -
SpringMVC 设计实现
在使用 SpringMVC 时,除了要在 web.xml 中配置 ContextLoaderListener 外,还要对 DispatcherServlet 进行配置。作为一个 Servlet,这个 DispatcherServlet 实现的是 Sun 的 J2EE 核心模式 中的 前端控制器模式(Front Controller), 作为一个前端控制器,所有的 Web 请求 都需要通过它来进行转发、匹配、数据处理,然后转由页面进行展现,因此这个 DispatcerServlet 可以看成是 SpringM原创 2024-06-12 16:00:00 · 1440 阅读 · 0 评论 -
IoC容器在Web环境中的启动
在 web.xml 中,已经配置了 ContextLoaderListener,它是 Spring 提供的类,是为在 Web 容器 中建立 IoC 容器 服务的,它实现了 ServletContextListener 接口,这个接口是在 Servlet API 中定义的,提供了与 Servlet 生命周期 结合的回调,比如上下文初始化 contextInitialized()方法 和 上下文销毁 contextDestroyed()方法。具体说来,这个启动过程是和 Web 容器 的启动过程集成在一起的。原创 2024-06-12 09:45:00 · 1161 阅读 · 0 评论 -
Spring AOP 如何生效
实现接口的类,多用于对 xml 标签的解析,并且入口为parse方法,如果是一个 bean 对象通常会和 Spring 监听器一起出现。原创 2024-06-11 15:15:00 · 192 阅读 · 0 评论 -
JDK 动态代理源码解读
最近在看 Spring AOP 部分的源码,所以对 JDK 动态代理具体是如何实现的这件事产生了很高的兴趣,而且能从源码上了解这个原理的话,也有助于对 spring-aop 模块的理解。原创 2024-06-11 08:15:00 · 224 阅读 · 0 评论 -
AOP源码深度解读
理论性的文字,我觉得就没必要再扯一遍咯,大道理讲这么多,越听越迷糊。不如直接看源码加注释来的明白痛快。所以话不多说,直接上源码。原创 2024-06-10 08:45:00 · 875 阅读 · 0 评论 -
循环依赖源码解读
一个对象依赖对象闭环到自己tip:不涉及代理对象问题解决方法:当一个对象已经实例化完毕了,还未初始化的时候,将它注入到它所依赖的已经实例好的对象(提前暴露对象),使得它所依赖的对象是个完整对象(实例化+初始化),然后再将这个完整对象注入给它。原创 2024-06-10 08:00:00 · 306 阅读 · 0 评论 -
BeanPostProcessor 源码分析
在此我举例一个典型的例子 AutowiredAnnotationBeanPostProcessor,是 BeanPostProcessor 的一个子类,是@Autowired 和@Value 的具体实现,其他的子类你也可以按如下的流程自行走一边,注意我的例子只是一个最为简单的例子,也就是用@Autowired 注入了一个普通的字段对象。BeanPostProcess 可以有多个,并且可以通过设置 order 属性来控制这些 BeanPostProcessor 实例的执行顺序。原创 2024-06-08 08:15:00 · 380 阅读 · 0 评论 -
BeanFactoryPostProcessor 源码分析
我其实觉得这个有点瑕疵,因为 BFPP 作用影响应该是当 Spring 还未创建 bean 的时候,可以用 BFPP 进行修改操作,可是这个属性编辑却影响了 bean 创建过后的修改操作,那么它就替代了 BPP(BeanPostProcessor)的作用发挥了。) 中使用这些 bean 的实例虽然在技术上是可行的,但这么来做会将 bean 过早实例化, 这违反了标准的容器生命周期. 同时也会引发一些副作用,例如绕过 bean 的后置处理。让我们看看它的方法,其中我省略了大部分无关代码。原创 2024-06-06 15:55:29 · 851 阅读 · 0 评论 -
DI注入过程
至此,完成了对 bean 的各种属性的依赖注入,在 bean 的实例化和依赖注入的过程中,需要依据 BeanDefinition 中的信息来递归地完成依赖注入。从源码中可以看到 createBeanInstance() 和 populateBean() 这两个方法与依赖注入的实现非常密切,createBeanInstance() 方法中生成了 bean 所包含的 Java 对象,populateBean() 方法对这些生成的 bean 对象之间的依赖关系进行了处理。原创 2024-06-06 15:44:33 · 864 阅读 · 0 评论 -
将bean解析封装成BeanDefinition
接着上一篇的 BeanDefinition 资源定位开始讲。Spring IoC 容器 BeanDefinition 解析过程就是把用户在配置文件中配置的 bean,解析并封装成 IoC 容器可以装载的 BeanDefinition 对象,BeanDefinition 是 Spring 定义的基本数据结构,其中的属性与配置文件中 bean 的属性相对应。(PS:可以结合我 GitHub 上对 Spring 框架源码的阅读及个人理解一起看,会更有助于各位开发大佬理解。地址如下。原创 2024-06-06 15:30:58 · 293 阅读 · 0 评论 -
BeanDefinition的资源定位过程
FileSystemXmlApplicationContext 从上层体系的各抽象类中继承了大量的方法实现,抽象类中抽取大量公共行为进行具体实现,留下 abstract 的个性化方法交给具体的子类实现,这是一个很好的 OOP 编程设计,我们在自己编码时也可以尝试这样设计自己的类图。其中的 getResourceByPath(location) 方法的实现则是在 FileSystemXmlApplicationContext 中完成的。原创 2024-06-06 15:15:24 · 838 阅读 · 0 评论