• 认真的 Netty 源码解析(一)
    Netty 源码好就好在它的接口使用比较灵活,往往接口好用的框架,源码都不会太简单。本文只介绍 TCP 相关的内容,Netty 对于其他协议的支持,不在本文的讨论范围内。Netty 源码一直在更新,各版本之间有些差异,我是按照 2018-09-06 的最新版本4.1.25.Final来进行介绍的。Echo 例子Netty 作为 NIO 的库,自然既可以作为服务端接受请求,也可以作为客户端发起请求。打开 netty-example 的源码,把echo包下面的代码复制出来玩一玩。鉴于读者对 NIO 或 Netty 的了解程度可能参差不齐,为了照顾初学者,很多地方需要啰嗦一些,所以希望读者一节一节往下看,对于自己熟悉的内容可以适当看快一些。
  • Tomcat 中的 NIO 源码分析
    本文将介绍 Tomcat 中的 NIO 使用,使大家对 Java NIO 的生产使用有更加直观的认识。本文基于 Tomcat 当前最新版本 9.0.6。Tomcat 中的其他接口感兴趣的读者请自行探索,如设置 webapp 目录,设置 resources 等这里,介绍第一个重要的概念:Connector。在 Tomcat 中,使用 Connector 来处理连接,一个 Tomcat 可以配置多个 Connector,分别用于监听不同端口,或处理不同协议。如果你使用 9.0 以前的版本,Tomcat 在启动的时候是会自动配置一个 connector 的,我们可以不用显示配置。Tomcat 使用不同的 endpoint 来处理不同的协议请求,今天我们的重点是NioEndpoint,其使用非阻塞 IO来进行处理 HTTP/1.1 协议的请求。
  • Java 非阻塞 IO 和异步 IO
    本文将介绍非阻塞 IO和异步 IO,也就是大家耳熟能详的 NIO 和 AIO。本文会先介绍并演示阻塞模式,然后引入非阻塞模式来对阻塞模式进行优化,最后再介绍 JDK7 引入的异步 IO,由于网上关于异步 IO 的介绍相对较少,所以这部分内容我会介绍得具体一些。希望看完本文,读者可以对非阻塞 IO 和异步 IO 的迷雾看得更清晰些,或者为初学者解开一丝丝疑惑也是好的。
  • Spring AOP 源码解析
    很多读者希望能写一写 Spring AOP 的源码分析文章,这样读者看完 IOC + AOP 也就对 Spring 会有比较深的理解了。Spring AOP 的源码并不简单,因为它多,所以阅读源码最好就是找到一个分支,追踪下去。所以,Spring AOP 需要做的是生成这么一个代理类,然后替换掉真实实现类来对外提供服务。在 Spring IOC 容器中非常容易实现,就是在 getBean(…) 方法用于查找或实例化容器中的 bean,这也是为什么 Spring AOP 只能作用于 Spring 容器中的 bean 的原因,对于不是使用 IOC 容器管理的对象,Spring AOP 是无能为力的。
  • Spring AOP 使用介绍,从前世到今生
    前面写过 Spring IOC 的源码分析,很多读者希望可以出一个 Spring AOP 的源码分析,不过 Spring AOP 的源码还是比较多的,写出来不免篇幅会大些。本文不介绍源码分析,而是介绍 Spring AOP 中的一些概念,以及它的各种配置方法,涵盖了 Spring AOP 发展到现在出现的全部 3 种配置方式。由于 Spring 强大的向后兼容性,实际代码中往往会出现很多配置混杂的情况,而且居然还能工作,本文希望帮助大家理清楚这些知识。目录:AOP, AspectJ, Spring AOP我...
  • 【Spring源码】Spring IOC 容器源码分析(一)
    本文较长,由于微信文章文字限制,IOC源码分析分为3个文章展示出来~Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。本文采用的源码版本是 4.3.11.RELEASE,算是 5.0.x 前比较新的版本了。为了降低难度,本文...
  • Mybatis源码分析之Cache二级缓存原理 (五)
    该功能用于缓存返回一份实例的Copy,用于保存线程安全。我们在之前的文章里面分析了配置文件的加载,我们回到那边来找到二级缓存的加载地方,一开始我就说了“如果需要开启只需在mapper上加入配置就好了”那么加载一定是在mapper的节点XMLConfigBuilder.parse()-->parseConfiguration-->mapperElement-->mapperElement看下mapperElement的方法privatevoidmapperElementthrowsException{if(parent!
  • Mybatis源码分析之Cache一级缓存原理(四)
    之前的文章我已经基本讲解到了SqlSessionFactory、SqlSession、Excutor以及Mpper执行SQL过程,下面我来了解下myabtis的缓存,它的缓存分为一级缓存和二级缓存,本文我们主要分析下一级缓存。为了解决这一问题,减少资源的浪费,MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候,如果判断先前有个完全一样的查询,会直接从缓存中直接将结果取出,返回给用户,不需要再进行一次数据库查询了。
个人资料

分享技术,和学习方法,用技术成就梦想!