![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码阅读
文章平均质量分 94
皇甫嗷嗷叫
励志架构师
展开
-
Netty的ChannelPipline传播源码解析
上一章节 ,我们基本讲述了Netty对于新连接接入与管道数据处理的源码解析,大家可能发现,在我们前面学习中,涉及到了很多的有关pipeline的操作,在前面介绍这些的时候,我为了保证主线逻辑的清晰,基本都是一概而过,本章节将对pipeline做一个详细的讲解!一、基础铺垫1. JAVA中的基本位运算符运算符描述&与|或~非^异或<<左移>>右移2. 位运算解释与实例&(与)十进制二原创 2021-08-03 08:30:49 · 232 阅读 · 0 评论 -
Netty服务端的新连接接入源码解析
经过上一章节的学习,我们基本了解了Netty是如何对IO事件以及异步任务的处理了,今天我们就一起来学习一下,Netty是如何处理新连接接入与数据读取的!一、源码寻找我们上一章节学到了,当存在IO事件的时候,Netty的反应堆线程会监听这些事件,然后进行处理,忘记的,可以回顾一下上一章节,,我们这里直接进入到:io.netty.channel.nio.NioEventLoop#processSelectedKey(java.nio.channels.SelectionKey, io.netty.cha原创 2021-08-02 09:45:35 · 225 阅读 · 0 评论 -
Netty的异步任务处理与Socket事件处理
经过前面几章的学习,我们基本是明白了Netty通道的创建、注册、与绑定与JDK NIO的对应关系,如果我们使用的是JDK NIO的方式去开发一个Socket服务端的时候,此时还缺少了一个重要的环节,就是循环处理IO事件!我们前面不只一次的见到Netty的异步事件,因为我们某些知识还没有学习到,所以我们都按照同步的方式去获取的,所以我们本章节将带你学习,Netty对于IO事件的处理与异步事件的处理!我们以绑定为出发点,由点到面进行分析!一、源码入口我们直接进入到绑定的源码分析:private sta原创 2021-07-21 08:32:30 · 545 阅读 · 1 评论 -
NioServerSocketChannel的绑定源码解析
前面两节课,我们着重分析了 initAndRegister方法,对通讯通道的创建、初始化以及注册到选择器上有了一个详细的介绍,回想JDK NIO的开发步骤,我们需要获取SocketChaennel、获取选择器Selector、将通道注册到选择器、绑定端口、处理事件!那么同样的Netty是基于NIO开发的,也同样少不了这几个步骤,迄今为止,我们已经学习了,Selector的创建、SocketChannel的创建、选择器的注册,今天我们要学的就是通道的绑定端口!欢迎关注公众号【源码学徒】一、源码入口我们回到原创 2021-07-14 14:40:48 · 168 阅读 · 0 评论 -
NioServerSocketChannel的注册源码解析
我们上一章分析了Netty中NioServerSocketChaennl的创建于初始化,本章节将继续分析NioServerSocketChannel的分析,NioServerSocketChannel是Netty官方封装的一个通道对象,旨用来代替或者包装JDK原生的SocketChannel对象,那么他是如何讲NioServerSocketChannel于JDK的NIO相关代码关联起来的呢?欢迎关注公众号【源码学徒】一、源码入口寻找我们上一节课主要分析的源码方法是initAndRegister方法,其实原创 2021-07-09 09:13:38 · 279 阅读 · 4 评论 -
NioServerSocketChannel的初始化源码
源码分析上一节课我们就NioEventLoop的初始化进行了一个初步的讲解,他是Netty很重要的一个类,后面还有针对它的分析,大家先对我前面介绍的组件有一个初步的认识!仔细的看,看到后面会有一种豁然开朗的感觉!我们这一节课学习服务端的ServerSocketChannel的初始化源码,首先,我们还是老规矩,我告诉你你从哪里找,他是如何一步一步调用到ServerSocketChannel的,然后在进行分析!一、入口寻找首先,我们大家再开发Netty服务端的时候,都会有这样几行代码:ServerBo原创 2021-07-06 13:45:47 · 224 阅读 · 0 评论 -
多线程协作处理数据读写
经过前面几章的学习,我们已经 能够掌握了JDK NIO的开发方式,我们来总结一下NIO开发的流程:欢迎关注公众号【源码学徒】创建一个服务端通道 ServerSocketChannel创建一个选择器 Selector将服务端通道注册到选择器上,并且关注我们感兴趣的事件serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);绑定服务管道的地址 serverSocketChannel.bind(new InetSocketAddres原创 2021-07-02 09:36:16 · 392 阅读 · 0 评论 -
深入分析NIO的零拷贝
本章还是关于NIO的概念铺底,有关NIO相关的代码,我还是希望大家闲余时间取网上找一下有关使用JDK NIO开发服务端、客户端的代码,我会取写这些,但是具体的代码我不会很详细的取介绍,下一章的话可能就要上代码了,具体的规划如下:讲一下NIO基础API的使用、分析Netty的核心思想,使用Reactor模式仿写一个多线程版的Nio程序、再然后就是关于Netty的源码分析了!欢迎关注公众号【源码学徒】回归正题,NIO的高性能除了体现在Epoll模型之外,还有很重要的一点,就是零拷贝!首先大家要先明白一点,所原创 2021-06-25 14:12:09 · 273 阅读 · 1 评论 -
深入Hotspot源码与Linux内核理解NIO与Epoll
一、为什么必须去了解NIO首先你需要之后Netty的主要实现手段就是Nio,很多人一直学不明白Netty,根本原因是 除了日常开发中很难能够实践,很大一部分原因是不熟悉NIO,事实上真正熟悉了NIO和它背后的原理之后,去查看Netty的源码就有如神助!我们今天就从最基本的IO、以及NIO学起!后续会跟新Netty源码系类的文章,有兴趣的小伙伴可以关注公众号 【源码学徒】二、操作系统是如何定义I/O的I/O相关的操作,详细各位从事java的人员并不陌生,顾名思义也就是Input/Output,对应着连个原创 2021-06-24 09:18:40 · 263 阅读 · 0 评论 -
NIO中的开发利器ByteBuffer源码解析
想要使用NIO开发Socket分服务端和客户端,必须掌握的一个知识点就是ByteBuffer的使用,他是NIO再数据传输中的利器!相比于BIO传输过程中的字节流,ByteBuffer更能体现出服务端/客户端对于数据的操作效率,ByteBuffer内存维护一个指针,使得传输的数据真正的能够达到重复使用,重复读写的能力!主要API和属性他是对于Buffer的一个默认实现,具体主要的属性和方法我们需要看Buffer类:主要属性//指针标记private int mark = -1;//指针的当前位置原创 2021-06-25 17:18:37 · 396 阅读 · 3 评论 -
一个Spring Bean从诞生到逝去的九次人生转折!
关于Spring生命周期的学习,前面已经写过很多篇文章去不断的探究Spring对一个Bean的创建、管理过程,在整个SpringBean的生命周期中,BeanPostProcessor是不可绕过的一环,他几乎贯穿了整个Spring Bean的生命周期!几乎我们现在所熟知Bean的生命周期的功能,大部分都是由BeanPostProcessor完成的!比如,依赖注入、循环依赖问题、Aop等,全部都是由BeanPostProcessor的扩展实现的!BeanPostProcessor的学习是我们理解Spring原创 2020-10-01 13:04:34 · 293 阅读 · 0 评论 -
跳出源码地狱,Spring巧用三级缓存解决循环依赖-原理篇
一、循环依赖所产生的原因在探讨Spring三级缓存解决循环引用之前,我们需要了解一点就是Spring所谓的循环依赖到底是什么,是如何产生的,为什么会产生这种问题?这就是经典的一个循环引用的问题,一个类的实例化依赖另外一个类,如果我们不使用Spring管理这两个bean而是自己手动创建,这种循环引用的方式实现极其简单:为什么Spring解决循环依赖比较麻烦呢?因为Spring创建一个Bean是需要通过反射来构建的,构建过程中无法感知这个类具体是什么类型的,它只能够实例化一个填充一个实体!于是:创原创 2020-09-25 14:14:18 · 820 阅读 · 1 评论 -
Spring:没有人比我更懂Java对象的创建!
一、开篇一问一个Spring Bean是Java对象吗?那么一个对象是Spring Bean吗?带着这个问题我们一起来回顾Spring的生命周期流程,彻底了解一个类在Spring中究竟做了那些操作!我们先看一段代码!诚然,相信只要是使用过Spring的人都应该知道,从Spring容器中获取的对象,里面的EmailServiceImpl是被Spring自动注入了的!但是相同的点是,他们两个都是一个Java对象,都是加载在JVM里面的,那么至少我们现在可以回答的问题了:SpringBean一定是一原创 2020-09-24 08:44:46 · 480 阅读 · 0 评论 -
带你跳出源码地狱,从原理上理解MyBatis对Spring源码的扩展实现
注意今天的文章只会对原理进行分析,可能会涉及少部分代码,但是不会太多,具体的源码分析,请移步牛逼哄哄的Spring是怎么被MyBatis给征服了? ! 建议先阅读本文章,了解原理之后再去观看源码,效果会稍微好一点!今天我们大概从以下几点去讲解MyBatis对于Spring的一个扩展思路!一、FactoryBean是干什么?首先我们至少要知道一个事情,就是FactoryBean的一个大致结构:可以看到,整个 FactoryBean有三个方法:getObject(): 返回具体创建的真实对象!原创 2020-09-17 09:07:44 · 214 阅读 · 0 评论 -
记一次向Spring官方提交PR的失败经历
一、事情始末周末无聊在家,打开Spring源码,想再温习一遍之前学习过的流程,忽然看到一段代码,就是在执行BeanFactoryPostProcessor的逻辑中我发现了这样奇怪的一幕:于是我就把代码改成这个样子(草率了)于是乎,整个代码都简便多了,当时随手写了一个测试类,没报错就直接提交到Spring项目上了,然后申请合并了,当我怀着激动地心,颤抖的手,提交完成之后,一天我都十分亢奋,是不是的打开github,看看作者回复了我没有!二、终于,草率了!到了下午三四点左右的时间,作者回复我了(都原创 2020-09-12 08:37:26 · 274 阅读 · 0 评论 -
你知道Spring中BeanFactoryPostProcessors是如何执行的吗?
了解了BeanDefinition以及生命周期的大概概念之后,我们班可以试着看一下源码!我们上一章也说到,BeanFactoryPostProcessors的执行时机是:在扫描完成之后,实例化之前! 那么我们看一下Spring是如何去回调BeanFactoryPostProcessors的呢?org.springframework.context.support.AbstractApplicationContext#refreshorg.springframework.context.support.A原创 2020-09-11 08:36:18 · 618 阅读 · 1 评论 -
想要学会Spring源码,你必知必会的BeanDefinition原理!
一、BeanDefinition浅析1. 基本概念了解首先我提出一个问题:一个java对象和一个Spring Bean有什么区别?这是一个经典的面试题,什么是java Object?万物皆对象,在Java内部所有的类,经过创建之后都可以称之为一个对象,SpringBean也是一个java Object, 但是Spring Bean是脱离于JAVA Object的,为什么这么说呢?因为一个class要想变成对象只需要new一下,就能够称之为一个对象,但是一个类要想变成一个Spring Bean就需要经过原创 2020-09-10 09:23:15 · 298 阅读 · 0 评论 -
面试问倒无数人的Spring事务问题,就被你这样说完了?
一、随便聊聊又是一周过去了,对于这周的收获你还满意吗?相信一直看我文章的小伙伴都知道,Spring源码精读系列的文章已经写了好多篇了,今天依旧是和以前一样,我们来分析Spring对于事务的管理!使用过Spring的小伙伴都应该知道,Spring可以通过配置或者再方法上加一个@Transactional注解,然后Spring就能够自动的对里面的JDBC操作进行管理,或提交或回滚!可能有些阅读过部分源码或者看过一切类似的文章的额同学应该知道他是基于AOP完成的对事务的管理,但是对于其实现的细节却不是很明白,原创 2020-08-30 18:38:45 · 694 阅读 · 0 评论 -
牛逼哄哄的Spring是怎么被MyBatis给征服了?
其实前几篇文章已经写了好多有关于Spring源码的文章,事实上,很多同学虽然一直在跟着阅读、学习这些Spring的源码教程,但是一直都很迷茫,这些Spring的源码学习,似乎只是为了面试吹逼用,我大概问过一些同学,很多同学看了很长时间的Spring但是依旧不知道如何将这些学到的知识运用到实际的案例上!其实这个问题很好解决,如果你在开发中很少能够遇见需要Spring扩展时,不妨把目光放到一些依托于Spring的项目,看看它们是如何运用Spring的扩展点的。对于Spring的学习,我认为最终真正学会的一定是原创 2020-08-24 18:05:44 · 183 阅读 · 1 评论