MyBatis 源码解析:配置文件的加载与解析

前面我们曾约定 mybatis-config.xml 为配置文件,SQL 配置文件为映射文件,本文我们将沿用上一篇中的示例程序,一起来探究一下 MyBatis 加载和解析配置文件,即 mybatis-config.xml 的过程。 在示例程序中,执行配置文件(包括后面要介绍映射文件)加载与解析的过程位于第一行代码中(如下),其中 Resources 是一个简单的基于类路径获取数据流的工具类,借助该工具类可以获取配置文件 mybatis-config.xml 的 InputStream 对象,然后将其传递给 SqlSessionFactoryBuilder 的 build 方法以构造 SqlSessionFactory。

阅读全文

MyBatis 源码解析:架构初探

MyBatis 是一个易用、轻量,且强大的半自动化 ORM 框架。记得多年前第一次接触该框架的时候它的名字还叫作 iBatis,那时候刚接触到 java web 开发,倦于徒手写 JDBC 代码的枯燥,于是开始转战 ORM 框架。SSH 一直被认为是 java web 开发的三大件,所以 Hibernate 当时被视为首选,但是第一次使用的过程并不愉快,不需要自己写 SQL 的结果就是自动生成的 SQL 查询效率非常低效(原因应该在于我对这个框架不够熟悉),于是放弃了对 Hibernate 的坚持,投入了 MyBatis 的怀抱,到今天为止已经使用 MyBatis 框架开发了好几个项目,虽然现在工作中使用我司自研的 ORM 框架,但是鉴于对 MyBatis 的好感,决定利用空余时间对其实现机制做一番探究,于是有了接下去的几篇博文。

阅读全文

理解分布式一致性算法:paxos

什么?Paxos 号称是最难理解的算法?虽然有些夸张,那也得看一下! 直接入正题,在分布式系统中存在多个主机节点,这些主机之间的通信机制一般分为 共享内存 和 消息传递 两种。这两种方式各有优劣,而 paxos 算法主要用来解决基于消息机制的分布式一致性问题。 在分布式系统中,网络一般被认为是不可靠的,所以传递的消息可能会存在延迟、丢失、重复等问题,发送消息的进程也可能出现运行缓慢、重启,甚至被杀死等情况。Paxos 算法解决的问题是在一个可能发生这些异常(不包括消息可能被篡改的情况)的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决策一致性的问题。

阅读全文

探秘线程池 ThreadPoolExecutor 的任务调度过程

线程池是 java 并发包的核心组件之一,为了减少线程创建和销毁所带来的性能开销,在实际项目中都会采用线程池来管理线程的创建、复用,以及消亡等过程。Executors 类提供了多种方法来简化线程池的创建,典型的应用场景如下: 12int nCpu = Runtime.getRuntime().availableProcessors();ExecutorService es = Executors.newFixedThreadPool(nCpu + 1);

阅读全文

探秘 ThreadLocal 的实现内幕与小地雷

Java 多线程类库对于共享数据的读写访问主要采用锁机制来保证线程安全,而本文所要探究的 ThreadLocal 则采用了一种完全不同的策略,它不是用来解决共享数据的并发访问问题的,ThreadLocal 让每个线程都将目标数据复制一份作为线程私有,后续对于该数据的操作都是在各自私有的副本上进行,线程之间彼此相互隔离,也就不存在竞争问题。

阅读全文

Spring MVC 源码解析:Web 环境下容器的初始化过程

Spring MVC 是目前最流行的 java web 框架(之一),是对传统 servlet 的高级封装,以提升 servlet 的灵活性和易用性。从广义上来说,Spring MVC 的执行过程可以分为 容器初始化 和 请求响应处理 两大部分,前者在 servlet 容器启动过程中完成,为后者的执行提供基本的运行环境,而后者则是 Spring MVC 的核心所在,负责接收请求到最终返回响应数据的复杂处理过程。

阅读全文

Spring IoC 源码解析:循环依赖的探测与处理

Spring 为开发人员提供了极其灵活和强大的配置使用方式,在方便开发的同时也为容器的初始化过程带来了不确定性,本篇所要介绍的循环依赖就是其中之一,尤其在一些大型项目中,循环依赖的配置往往是我们不经意而为之的,幸好 Spring 能够在初始化的过程中探测到对象之间的循环依赖,并能够在一定程度上对其进行处理。

阅读全文

Spring IoC 源码解析:高级容器的初始化过程

前面我们一直在以 BeanFactory 作为出发点探究容器的初始化和依赖注入过程,不过 Spring 为我们提供了更加高级的接口 ApplicationContext 可供使用,这也是在大众场景中官方推荐的使用方式。ApplicationContext 相对于 BeanFactory 扩展了许多实用功能,方便开发者的使用,二者的结构设计我们也在前面的文章中进行了专门的讲解,本篇我们一起来详细探究一下基于 ApplicationContext 的容器初始化和注入过程,至于 ApplicationContext 的使用方式,广大开发者应该是信手拈来,这里还是简单的举例一下: 123ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-core.xml");MyBean myBean = (MyBean) context.getBean("my-bean");myBean.sayHello();

阅读全文

Spring IoC 源码解析:bean 实例的创建与初始化

到上一篇为止,我们完成了对于 bean 配置进行解析和注册过程的探究,经过这一过程我们编写在 XML 中的半结构化配置已经成为一个个的 beanDefinition 实例存在于容器之中,接下来就可以通过 getBean 的方式获取我们期望的 bean 实例,本篇中我们将继续探究从发出 getBean 指令到获取到对应 bean 实例的详细过程。

阅读全文

Powered by hexo & Theme by hiero   Copyright © 2015-2019 浙ICP备 16010916  号,指 · 间 All Rights Reserved.