原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/

概述

Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果。

Spring 的缓存技术还具备相当的灵活性,不仅能够使用 SpEL(Spring Expression Language)来定义缓存的 key 和各种 condition,还提供开箱即用的缓存临时存储方案,也支持和主流的专业缓存例如 EHCache 集成。

其特点总结如下:

  • 通过少量的配置 annotation 注释即可使得既有代码支持缓存
  • 支持开箱即用 Out-Of-The-Box,即不用安装和部署额外第三方组件即可使用缓存
  • 支持 Spring Express Language,能使用对象的任何属性或者方法来定义缓存的 key 和 condition
  • 支持 AspectJ,并通过其实现任何方法的缓存支持
  • 支持自定义 key 和自定义缓存管理者,具有相当的灵活性和扩展性

原来我们是怎么做的

这里先展示一个完全自定义的缓存实现,即不用任何第三方的组件来实现某种对象的内存缓存。

场景是:对一个账号查询方法做缓存,以账号名称为 key,账号对象为 value,当以相同的账号名称查询账号的时候,直接从缓存中返回结果,否则更新缓存。账号查询服务还支持 reload 缓存(即清空缓存)。

首先定义一个实体类:账号类,具备基本的 id 和 name 属性,且具备 getter 和 setter 方法

清单 1. Account.java
 1  package cacheOfAnno; 
 2 
 3  public class Account { 
 4    private int id; 
 5    private String name; 
 6   
 7    public Account(String name) { 
 8      this.name = name; 
 9    } 
10    public int getId() { 
11      return id; 
12    } 
13    public void setId(int id) { 
14      this.id = id; 
15    } 
16    public String getName() { 
17      return name; 
18    } 
19    public void setName(String name) { 
20      this.name = name; 
21    } 
22  }
View Code

然后定义一个缓存管理器,这个管理器负责实现缓存逻辑,支持对象的增加、修改和删除,支持值对象的泛型。如下:

相关文章:

  • 2021-05-15
  • 2022-02-22
  • 2021-10-05
  • 2021-08-18
  • 2022-12-23
猜你喜欢
  • 2021-08-10
  • 2021-07-22
  • 2022-12-23
  • 2022-02-11
  • 2021-08-15
相关资源
相似解决方案