摘要
日常开发中,需要用到各种各样的框架来实现API、系统的构建。作为程序员,除了会使用框架还必须要了解框架工作的原理。这样可以便于我们排查问题,和自定义的扩展。那么如何去学习框架呢。通常我们通过阅读文档、查看源码,然后又很快忘记。始终不能融汇贯通。本文主要基于Spring
Cache扩展为例,介绍如何进行高效的源码阅读。
SpringCache的介绍
为什么以Spring Cache为例呢,原因有两个
-
Spring框架是web开发最常用的框架,值得开发者去阅读代码,吸收思想
-
缓存是企业级应用开发必不可少的,而随着系统的迭代,我们可能会需要用到内存缓存、分布式缓存。那么Spring Cache作为胶水层,能够屏蔽掉我们底层的缓存实现。
一句话解释Spring Cache: 通过注解的方式,利用AOP的思想来解放缓存的管理。
step1 查看文档
首先通过查看官方文档,概括了解Spring Cache https://docs.spring.io/spring-
boot/docs/current/reference/html/boot-features-caching.html
重点两点
- 两个接口抽象
Cache
,CacheManager
,具体的实现都是基于这两个抽象实现。典型的SPI机制,和eat your dog food。当需要提供接口给外部调用,首先自己内部的实现也必须基于同样一套抽象机制
The cache abstraction does not provide an actual store and relies on
abstraction materialized by the org.springframework.cache.Cache and
org.springframework.cache.CacheManager interfaces.
- Spring Cache提供了这些缓存的实现,如果没有一种
CacheManage
,或者CacheResolver
,会按照指定的顺序去实现
If you have not defined a bean of type CacheManager or a CacheResolver named
cacheResolver (see CachingConfigurer), Spring Boot tries to detect the
following providers (in the indicated order): 1.Generic 2.JCache (JSR-107)
(EhCa