自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (2)
  • 收藏
  • 关注

原创 Sping IOC容器启动流程和扩展点源码分析

Sping容器IOC流程源码分析Spring主流程方法refreshfinishBeanFactoryInitialization方法preInstantiateSingletons方法getSingleton(beanName)方法getBean(beanName)方法createBean(beanName, mbd, args)方法resolveBeforeInstantiation方法(后置处理器接口进行逻辑处理解析)getSingleton(String beanName, ObjectFactor

2020-10-13 21:43:00 125

原创 在spring中玩转自定义注解

这里写目录标题1.注解扫描生效原理2.基于@Component元注解开发自定义注解2.1 开发注解,使用component作为元注解2.2 实现InstantiationAwareBeanPostProcessor接口,实现自定义创建对象进行注册3.基于注解扫描开发自定义注解1.注解扫描生效原理ClassPathScanningCandidateComponentProvider类:这个类的主要作用是进行包扫描,可以指定扫描的包和特定的类,默认扫描路径是类路径,且扫描的是Component注解标记的类或

2020-09-03 17:34:36 569

原创 ConcurrentHashMap源码阅读浅析

ConcurrentHashMap源码阅读浅析全局变量和类简介Hash算法Put方法实现数组初始化方法Size计数的方法协助扩容方法核心: 扩容方法ConcurrentHashMap主体流程与HashMap有很多的相似处,可以先阅读HashMap源码再查看会比较容易理解全局变量和类简介//默认的初始化容量private static final int DEFAULT_CAPACITY = 16;//默认负载因子private static final float LOAD_FACTOR = 0

2020-07-02 23:41:39 204

原创 RocketMQ生产者和消费者流程图

从之前的文章整理,可以配合阅读:RocketMQ源码阅读之消费者RocketMQ源码阅读之生产者RocketMQ生产者负载均衡算法

2020-06-11 19:47:53 1237

原创 RocketMQ源码阅读之消费者

RocketMQ源码阅读之消费者创建消费者并启动拉取消息的服务负载均衡服务 rebalanceService.start()RocketMQ消费者代码相对生产者来说要更复杂一些。本次阅读的消费者代码是使用push消费方式的源码实现,其设计底层其实只是将pull的方式进行封装从而实现push消费的效果。创建消费者并启动public static void main(String[] args)...

2020-04-28 23:56:14 357

原创 springboot-rocketMQ-stater源码解析及优雅的整合方式

springboot-rocketMQ-stater源码解析及优雅的整合方式1.springboot与rocketMQ优雅整合2.rocketmq-spring-boot-starter源码解析2.1 RocketMQAutoConfiguration自动装配入口类2.2 整合生产者的源码分析1.springboot与rocketMQ优雅整合在springboot中使用RocketMQ消息队列...

2020-04-22 23:35:49 1507

原创 mybatis插件实现原理和手写实现

mybatis插件实现原理mybatis插件实现原理实现可插拔的插件功能1.定义拦截器接口2.定义注解3.定义一个代理类4.测试mybatis提供了一个可插拔的插件插件实现方式,只要实现 Interceptor接口,并在实现类中使用注解@Intercepts表明要增加的类和方法。这篇文章将分享mybatis插件的底层实现原理,并动手模拟写一个我们自己的Demomybatis插件实现原理myb...

2020-03-29 21:02:30 460

原创 SpringMVC扩展点和案例说明

SpringMVC扩展点和案例说明RequestMappingHandlerMapping 扩展点场景一:为URI统一加版本控制二级目录三级目录RequestMappingHandlerMapping 扩展点重写这个类的扩展点如下:public class CustRequeMappingHandlerMapping extends RequestMappingHandlerMapping { //判断是否是处理的方法:基本上不需要重写 @Override protected

2020-11-09 22:18:16 939

原创 MappingJackson2HttpMessageConverter使用及jackson配置原理和避坑说明

MappingJackson2HttpMessageConverter消息转换器创建和生效原理HttpMessageConverters对象的创建使用WebMvcConfigurationSupport配置时转换器创建过程使用WebMvcAutoConfiguration配置时转换器创建过程MappingJackson2HttpMessageConverter的配置使用WebMvcConfigurationSupport配置时使用WebMvcAutoConfiguration配置时MappingJackso

2020-11-05 19:24:13 36652 4

原创 RequestResponseBodyMethodProcessor类源码解析

RequestResponseBodyMethodProcessor类源码解析参数解析器接口实现逻辑返回值处理器接口解析逻辑这个类用于解析@RequestBody入参和@ResponseBody返回值解析问题。先查看一些类继承结构图:如上图描述,以上几个类作用标记如图。标记几个类的有部分相同的代码逻辑,同时也只有以上几种情况下@ControllerAdvice注解的切面才会生效,其余情况不会的入参和返回值不会对其产生作用。参数解析器接口实现逻辑HandlerMethodArgumentResol

2020-11-04 22:10:00 3639

原创 SpringMVC请求执行全流程源码解析

SpringMVC请求执行全流程源码解析前置概念父子容器概念springMVC核心过滤器DispatcherServletDispatcherServlet类的源码解析初始化过程请求处理流程请求入口DispatcherServlet处理方法doServiceDispatcherServlet处理请求的核心流程获取处理器执行链1. 获取处理器映射器,用于获取处理器执行链2.通过映射器获取处理器和拦截器封装成处理器执行链3.获取处理器的流程3.1 获取请求uri3.2 通过请求参数和路径查找处理器获取处理器适配

2020-11-03 10:35:36 787

原创 RequestMappingHandlerAdapter源码解析

RequestMappingHandlerAdapter源码解析构造方法初始化流程扩展总结方法入参绑定使用注解和默认支持注入对象:扩展接口开发构造方法//构造方法初始化消息转换器public RequestMappingHandlerAdapter() { StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); stringHttpMessageConverter.setWr

2020-10-29 15:31:13 403

原创 SpringMVC HandlerMapping(处理器映射器)常用实现类源码详解

SpringMVC 处理器映射器常用实现类源码详解处理器的三种实现方式方式一:最常用的方式@RequestMapping注解方式方式二:使用BeanName方式方式三:使用SimpleUrl方式三种处理器映射器的初始化源码分析RequestMappingHandlerMapping初始化过程源码解析BeanNameUrlHandlerMapping初始化过程源码解析SimpleUrlHandlerMapping初始化过程源码解析处理器的三种实现方式处理器就是SpringMVC中的Controller ,

2020-10-27 23:25:15 548

原创 SpringMVC自动配置类避坑及源码详解

SpringMVC自动配置类WebMvcAutoConfiguration类介绍二级目录三级目录在SpringBoot中SpringMVC默认自动配置了在spring-boot-autoconfigure.jar/META-INF/spring.factories中看到如下:本文主要介绍mvc配置类org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,这个类中定义了默认的配置,例如静态资源文件的访问。We

2020-10-26 22:25:18 2407

原创 @Configuration配置类的full和lite模式

full和lite模式在之前Spring核心后置处理器ConfigurationClassPostProcessor文章中提到过这两个属性,这里再次拿出来说明。@Configuration注解标记的类是配置类,Bean定义信息被标记为full 类型注解@Component @ComponentScan @Import @ImportResource 标注的类是配置类,Bean定义信息被标记为lite 类型类中的方法被@Bean注解标记的类也是配置类,Bean定义信息被标记为lite 类型lite模

2020-10-21 21:10:19 1777

原创 Spring核心后置处理器ConfigurationClassPostProcessor

ConfigurationClassPostProcessorConfigurationClassPostProcessor类层次postProcessBeanDefinitionRegistry方法(核心)processConfigBeanDefinitions方法解析的核心方法doProcessConfigurationClassloadBeanDefinitions方法加载BeanDefinitionregisterBeanDefinitionForImportedConfigurationClass

2020-10-21 16:34:30 315

原创 Springboot与Dubbo整合

Springboot与Dubbo整合基于 dubbo-spring-boot-starter整合方式定义接口添加maven依赖服务提供者provider配置消费者消费者配置整合优缺点SpringBoot中使用xml配置 --- 推荐三级目录基于 dubbo-spring-boot-starter整合方式定义接口public interface DemoService { String sayHello(String name);}添加maven依赖<dependencies&gt

2020-10-13 22:14:49 132

原创 Spring循环依赖解决源码解析

Spring循环依赖解决无法解决的循环依赖的方式循环依赖解决原理----三级缓存解决步骤相关方法无法解决的循环依赖的方式1) Spring无法解决构造方法注入引起的循环依赖问题2) Spring无法解决多例对象的循环依赖问题,因为多例对象是不进行缓存的循环依赖解决原理----三级缓存//第一级缓存:缓存已经完成了实例化和属性设置的单例对象(单例对象缓存)private final Map<String, Object> singletonObjects = new Concurren

2020-10-13 21:53:13 107

原创 JAVA HashMap源码阅读

JAVA Hash源码阅读源码阅读相关方法及注释put()方法执行流程总结扩容方法关键点转红黑树条件红黑树转链表的时机哈希码无符号右移后异或运算的原因数组容量必须是2的n次幂源码阅读相关方法及注释public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { /* * 0: 0.60653066

2020-06-16 00:02:26 133

原创 Dubbo中的SPI机制源码解析

Dubbo中的SPI机制源码解析SPI机制简介自适应拓展机制介绍扩展点源码阅读1.获取扩展的方法SPI机制简介SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。在源码阅读之前必须要理解的SPI机制中的注解。@SPI 这个注解标识这是spi的一个扩展点,实现这个接口可以增加一

2020-06-14 19:19:01 241

原创 Java零拷贝原理介绍

Java零拷贝原理介绍DMA 传输原理传统IO方式零拷贝方式用户态直接 I/Ommap+writeSendfileSendfile+DMA gather copyJava使用零拷贝基于内存映射(mmap)基于sendfileRocketMQ 和 Kafka 零拷贝使用对比DMA 传输原理在介绍IO方式前,先介绍以下DMA传输原理。DMA 的全称叫直接内存存取(Direct Memory Access),是一种允许外围设备(硬件子系统)直接访问系统主内存的机制。也就是说,基于 DMA 访问方式,系统主内存

2020-05-18 21:37:22 648

原创 Netty中的解码器介绍

Netty中的解码器介绍LengthFieldBasedFrameDecoder解码器场景一场景二场景三场景四场景五场景六LineBasedFrameDecoder 换行符解码器DelimiterBasedFrameDecoder使用自定义标识符解码器FixedLengthFrameDecoder固定长度解码器在TCP传输中,由于拆包粘包的存在,会导致半包读写的问题。导致拆包粘包问题原因:1.应用程序写入的字节数大于套接字缓冲区的大小2.进行MMS(最大报文段长度)大小的TCP分段3.以太网帧的p

2020-05-16 12:25:09 875

原创 Java NIO API学习记录

Java NIO API学习记录Buffer原理将文件映射到内存直接内存访问Buffer原理java nio中有很多buffer ,最常用的ByteBuffer , 这些buffer包含三个指针指向byte数组: position limit capacity.position : 创建出来时为0 写模式下的写起始位置 , 读模式下的读开始位置limit:写模式下最大可写位置 , 读模式下最大可读取的位置capacity: 总容量大小Buffer创建ByteBuffer byteBuf

2020-05-15 23:00:12 124

原创 Netty开发入门示例

Netty开发入门示例服务端代码服务端启动代码服务端逻辑处理代码 Handler客户端代码使用解码器服务端代码服务端启动代码import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.ni

2020-05-15 00:45:57 248

原创 Java NIO之多路复用示例

Java NIO之多路复用示例服务端代码客户端代码服务端代码import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.*;import java.util.Iterator;import java.util.Set;public class MultiplexerTimeServer implements Runnable

2020-05-15 00:17:19 668 2

原创 java异步IO之AIO示例

java异步IO之AIO示例服务端开发服务端启动代码如下:服务端业务处理逻辑示例代码TimeHandler回调处理类 ReadCompletionHandler客户端代码原理服务端开发服务端启动代码如下:import java.io.IOException;import java.net.InetSocketAddress;import java.nio.channels.AsynchronousServerSocketChannel;import java.util.concurrent.Ti

2020-05-15 00:07:15 291

原创 RocketMQ生产者负载均衡算法实现

RocketMQ生产者负载均衡算法实现生产者负载均衡官方文档的解释如下:Producer端在发送消息的时候,会先根据Topic找到指定的TopicPublishInfo,在获取了TopicPublishInfo路由信息后,RocketMQ的客户端在默认方式下selectOneMessageQueue()方法会从TopicPublishInfo中的messageQueueList中选择一个队列...

2020-04-28 22:42:57 1705

原创 RocketMQ源码阅读之生产者

RocketMQ源码阅读之生产者生产者创建及启动流程1. 创建生产者2. 启动生产者2.1 defaultMQProducerImpl.start() 启动生产者生产者发送消息流程发送异步消息发送同步消息目标:本文的目的是梳理RocketMQ生产者从创建到启动及最终发送的源码主体逻辑,掌握生产者代码的主体流程。生产者创建及启动流程1. 创建生产者DefaultMQProducer pro...

2020-04-27 23:36:52 324

原创 mybatis配置文件解析源码

mybatis配置文件解析源码阅读1. 构建会话工厂进行资源配置文件阅读2.构建XML解析器3.进行文件解析3.1 解析 properties标签3.2 解析 settings标签3.3 解析 typeAliases标签3.4 解析 plugins标签3.5 解析 environments标签3.5 解析 typeHandlers标签3.5 解析 mappers标签1. 构建会话工厂进行资源配置...

2020-03-30 23:55:41 133

原创 mybatis中Mapper接口调用的参数封装

接着我们上一次分享的mybatis源码阅读,这次我将通过阅读去了解我们在调用自己写的mapper接口的时候,mybatis具体是怎样与数据库交互的。mapper接口的代理对象大家都知道我们通过@mapper注解声明了mybatis的mapper接口,然后通过调用接口方法就能查询数据库。通过之前mybatis源码阅读文章,我们知道其实我们获取到的接口实现类是动态代理MapperProxy对象,而...

2020-03-29 15:18:55 845 1

原创 mybatis源码阅读

mybatis源码阅读之启动流程欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入...

2020-03-24 01:00:08 319

RocketMQ生产者消费者完整流程.vsd

配合看RocketMQ的生产者和消费者源码,里面有完整的启动流程和消费流程

2020-06-11

mybatis-3-mybatis-3.5.4-src-read.zip

本人阅读后的mybatis源码,对关键地方都加了标注和理解,可以查看本人的分享文章。具体的流程都做了详细的解释说明

2020-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除