
源码阅读
文章平均质量分 84
小楼夜听雨dayrain
只要静下心来,世界上没有学不会的知识
展开
-
[Spring源码阅读]通过Assert校验参数
在Spring源码中发现了另一种相对更优雅的写法,通过Assert校验参数。该工具类位于包: org.springframework.util。原创 2022-08-23 22:42:06 · 640 阅读 · 0 评论 -
[Spring源码阅读]如何通过配置文件管理策略
策略,可以理解为解决某个问题的具体方法。当一个问题的解决方法有多种,并且需要根据具体场景灵活替换时,我们可以使用策略模式。策略模式的概念不多说,借网上的图来描述一下:策略的实现依赖于具体的业务场景,这个没什么好说的;但是策略的管理是一种比较通用的方式,也是本文探讨的主要内容。以上图为例,Context维护着策略的实现,executeState接口屏蔽了这种实现。除了提供获取策略的途径外,Context还需要做下面两件事:1. 策略收集。原创 2022-08-21 22:30:05 · 328 阅读 · 0 评论 -
[jdk源码阅读]Java HashMap的设计思想
HashMap的作用Map是一种数据结构,用于存放Key-Value形式的数据。HashMap是一种依赖Hash来实现数据检索的Map,借助它我们能够以接近O(1)的时间复杂度快速存取数据,效率极高。HashMap工作中用到的非常多,之前也有看过源码,不过没有好好总结一下,今天以博客的方式做一个记录。HashMap的基本结构试想一下,如果让我们来设计HashMap,该怎么设计?1、首先数据的形式是Key-Value的形式,需要用一个类绑定其关系,暂定这个类为Node。Node{原创 2022-02-20 17:51:36 · 780 阅读 · 1 评论 -
[Spring源码阅读]第一篇:ApplicationContext与BeanFactory有什么区别?
概述工作中和ApplicationContext打交道的场合应该还是比较多的。例如,我可以通过ApplicationContext从Spring IOC容器中取出某类Bean放入自己的map中,用于策略替换:其实这种用法体现了ApplicationContext的一个作用:IOC容器。BeanFactory从名称上看来,也是一个容器,它与ApplicationContext有着何种联系?ApplicationContext是BeanFactory的一个拓展。结构分析以Ann.原创 2021-08-27 11:16:06 · 283 阅读 · 0 评论 -
[Mybatis源码篇]五、Mybatis执行一条sql的全过程
首先是环境准备,SqlSessionFactory初始化时会解析xml配置文件,解析为Environment、Configuration对象通过SqlSessionFactory获取一个SqlSessionSqlSession中包含一个执行器Executor以及配置类实例:Configuration对象,主要用于sql的执行,是mybatis的核心组件。随后通过SqlSession我们可以拿到Mapper的代理对象,代理对象在创建过程中需要我们定义的mapper接口通...原创 2021-08-25 10:27:49 · 1212 阅读 · 0 评论 -
[Mybatis源码篇]四、Configuration类详解
前面的文章分析过,Configuration与配置文件(或者配置类)相对应,SqlSessionFactoryBuilder构建而成,存放着mybatis所需要的配置项。在单数据源的项目中,一般只会有一个Configuration实例,因为Configuration是与SqlSessionFactory相绑定的。SqlSessionFactory持有Configuration的引用,在创建SqlSession的过程中会把Configuration引用传递给SqlSession。此篇博客的目的在于分析原创 2021-08-20 11:05:54 · 649 阅读 · 0 评论 -
[Mybatis源码篇]三、MapperProxyFactory(映射器代理工厂)的实现原理
再次回顾Mybatis的基本用法1、定义Mapper接口2、在xml(或注解)中写sqlmybatis帮我们屏蔽了所有和数据库相关的操作,我们只需要给他提供参数、sql、标注返回值的类型即可。通过mapper接口我们可以传递参数、获取返回值;通过xml或者注解我们可以提供需要执行的sql。那么问题来了,究竟是谁在干活?我们经常在service中注入的dao来自于哪里?答案自然是————代理代理那些年我对代理的偏见代理在我的印象中一直使用来增强对象的,通常这么用XXXXX原创 2021-08-09 19:47:31 · 1544 阅读 · 1 评论 -
[Mybatis源码篇]二、TypeHandler原理
是什么上一篇说到Mybatis会把所有的配置放到一个类中——Configuration在这个Configuration里,有一个对象叫做 TypeHandlerRegistry。TypeHandlerRegistry是一个TypeHandler容器,而TypeHandler定义着Java类型与数据库类型之间的映射关系。构造函数中自定义了一些映射关系,作为myabtis的默认配置。除了默认的处理器外,mybatis允许用户自定义处理器,满足一些特殊场合的引用。用户需要继承...原创 2021-08-04 11:46:33 · 789 阅读 · 0 评论 -
[Mybatis源码篇]一、SqlSession的创建过程与作用
结构图mybatis核心组件之间的关系可以用下图表示:其中类名前加个”I“表示接口SqlSessionFactoryBuilder从图上可以看到,除了Configuration外,每个类的类名都包含一个”SqlSession“,从结构图中也可以看到,我们最终的目标就是为了创建SqlSession,SqlSession可以暂时理解为jdbc中的Connection,通过SqlSession执行sql。SqlSessionFactoryBuilder顾名思义,是SqlSessionFac原创 2021-08-03 14:07:41 · 905 阅读 · 0 评论 -
【jdk源码阅读】第四篇:Launcher源码阅读(类加载器相关)
前言从宏观角度来看,JVM中实例化一个对象的基本过程如下:类加载器身份原创 2021-06-11 09:25:59 · 331 阅读 · 0 评论 -
【jdk源码阅读】第三篇:StringBuffer、StringBuilder源码分析
String虽然是线程安全的,但是在某些场合的表现不尽如人意,上篇文章也分析了,用final修饰的char数组具有不可变性,一旦创建便不能修改。宏观上的字符串截取、拼接等修改操作,都是通过创建新的对象实现的,涉及大量的数组拷贝,性能自然不会太好。因此,就有了StringBuffer和StringBuilder。。。继承体系StringBuilder与StringBuffer处于同一层级,就不重复贴图了。CharSequence和Serializable都是老朋友了,我们看下Appen原创 2021-05-21 09:00:21 · 348 阅读 · 1 评论 -
【jdk源码阅读】第二篇:String源码分析
继承体系public final class String implements java.io.Serializable, Comparable<String>, CharSequence {String实现了三个接口,前两个接口的作用应该比较明显了(序列化、比较)。一个接口通常代表着一种抽象。CharSequence希望能够为有序的字符序列,提供标准的访问接口。public interface CharSequence { int len原创 2021-05-18 09:45:27 · 249 阅读 · 0 评论 -
【jdk源码阅读】第一篇:Integer源码分析
包装类型存在的必要性基本类型的作用比较单一,且不具有对象的性质。在Java这门存粹的面向对象语言里,对象才是第一公民。比如基本类型不支持泛型(第二种写法报错)基本类型有各自的默认值,但不能为null,比如int的默认值为0,但是0并不是在所有场合下都能代替null的。总之,包装类型的存在具有一定的必要性。装箱与拆箱箱:包装类型就像是个箱子,包裹着基本类型,赋予其更多的含义。装箱:基本类型转化为包装类型的过程。public class Main { public原创 2021-05-11 08:55:00 · 279 阅读 · 2 评论