
源码解读
西红柿系番茄
知其然,知其所以然。
展开
-
好玩的编译时注解处理工具——APT
大家对Java中的注解(Annotation)应该都不陌生吧,JDK1.5就引进来了,它本质上只是一种元数据,和配置文件一样。利用反射在运行时解析处理能够实现各种灵活强大的功能,比如Spring就将其作用发挥得淋漓尽致。至于用法,这里就不说了,我的其它文章里面很多地方有用到过,可以参考一下。一、运行时注解与编译时注解我们看到的大部分注解,它们都是在代码运行时才使用的,所以一般定义成这样...原创 2020-01-05 19:21:21 · 1991 阅读 · 3 评论 -
解读Mybatis Plus的ActiveRecord,并实现Spring Data JPA版本的AR
之前在做自己项目使用Mybatis的时候,一次偶然的机会看到了Mybatis Plus并使用了起来。不得不说,这个工具真的给开发提供了很大的便利性,推荐大家去试一下。特别是,它的ActiveRecord模式深深的吸引住了我:只要实体类继承一个类,并重写获取主键的值的方法,就可以使用实例对象去调用简单的增删改查方法。于是,我决定窥探一下Mybatis Plus工具的ActiveRecord模式。...原创 2018-11-10 15:56:00 · 4555 阅读 · 0 评论 -
窥探ThreadLocal的世界
一、初识ThreadLocal这个类大家应该都非常熟悉了,API文档是这么介绍它的:该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,...原创 2018-11-10 11:36:39 · 531 阅读 · 0 评论 -
窥探p6spy的实现原理,抽取核心代码完成自己的SQL执行监控器
某一天线上项目突然炸了,报障说出现系统登录不了、数据查询超慢等一系列问题...奇怪,之前明明还跑的好好的,怎么会这样子了呢?后来我们的数据库大神(还是妹子哦)查了数据库,统计执行比较耗时的SQL语句,对其中的一些字段临时加了索引,问题算是暂时解决了,给她点个赞QAQ。这个时候,我就萌发了一个想法,可否在项目里面引入一个监控、记录SQL运行情况的功能,并提供查询接口和显示界面。说干就干,首先...原创 2018-11-25 13:14:43 · 3411 阅读 · 6 评论 -
解读SpringMVC源码
自从Struts2彻底退出江湖之后,Spring MVC已经成为了表现层框架的扛把子。今天,我们就来窥探一下它的世界。本文围绕Spring MVC的前端控制器DispatcherServlet展开,先介绍了它的类继承关系和初始化方法,然后介绍Spring MVC的九大组件和运行流程,最后带领大家分析从请求到响应的相关处理环节代码。一、Spring MVC框架的接入点最开始使用Sprin...原创 2019-01-20 16:48:08 · 717 阅读 · 0 评论 -
解密JUC——非阻塞同步指令CAS
一、为什么使用CAS?CAS是啥?在多线程中,为了保证一系列的操作具有原子性,独占锁是比较简单实用的同步机制,但它是一项悲观技术,对系统性能有严重的损耗,因为它假设了最坏的情况:如果你不锁门,那么捣蛋鬼就会闯入并搞得一团糟。对于细粒度的操作,还有另外一种更加高效的办法,可以在不发生干扰的情况下完成更新操作。这种方法需要借助冲突检查机制来判断在更新过程中是否存在来自其它线程的干扰,如果存在,...原创 2019-07-01 22:28:43 · 336 阅读 · 0 评论 -
解密JUC——构建锁和同步器的AQS
AQS,本名:AbstractQueuedSynchronizer,是Java 5引入的一个并发工具类。它提供了一个基于FIFO(先进先出)队列,可以用于构建锁或者其他相关同步装置的基础框架。它的名字翻译为抽象队列同步器,可以分为三个词:抽象、队列、同步器。正好不知道怎么开始,那么现在我们就以名字的三个词作为切入点。但是为了逻辑讲得清晰,我调了一下顺序:同步器->抽象->队...原创 2019-07-02 23:58:04 · 505 阅读 · 0 评论