基于xml的配置感觉没有注解形式简单明了,咱不考虑了。

进入正题之前先提个疑问,希望知道的人能告诉一下

下述介绍会有这段代码:

  1. @Cacheable(value="myCache", key="'get'+#userNo")
  2. public String get(String userNo){
    此处#userNo会动态的传入?

1,spring配置文件

  1. <bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager">
  2. <property name="cacheSpecification" value="initialCapacity=512,maximumSize=4096,concurrencyLevel=16,expireAfterAccess=360s" />
  3. </bean>
  4.  
  5. <!-- 启用缓存注解功能 -->
  6. <cache:annotation-driven order="" cache-manager="cacheManager" proxy-target-class="true" />

@参考文章1里提供了SimpleCacheManager进行的配置

2,类中使用缓存

@参考文章1里写的比较好,不自己写代码了,直接复制粘贴

  1.  
  1. package com.jadyer.service;
  2.  
  3. import java.util.Map;
  4. import java.util.concurrent.ConcurrentHashMap;
  5.  
  6. import org.springframework.cache.annotation.CacheEvict;
  7. import org.springframework.cache.annotation.Cacheable;
  8. import org.springframework.stereotype.Service;
  9.  
  10. /**
  11. * Cacheable注解负责将方法的返回值加入到缓存中
  12. * CacheEvict注解负责清除缓存(它的三个参数与@Cacheable的意思是一样的)
  13. * @see ----------------------------------------------------------------------------------------------------------
  14. * @see value------缓存位置的名称,不能为空,若使用EHCache则其值为ehcache.xml中的<cache name="myCache"/>
  15. * @see key--------缓存的Key,默认为空(表示使用方法的参数类型及参数值作为key),支持SpEL
  16. * @see condition--只有满足条件的情况才会加入缓存,默认为空(表示全部都加入缓存),支持SpEL
  17. * @see ----------------------------------------------------------------------------------------------------------
  18. * @see 该注解的源码位于spring-context-3.2.4.RELEASE-sources.jar中
  19. * @see Spring针对Ehcache支持的Java源码位于spring-context-support-3.2.4.RELEASE-sources.jar中
  20. * @see ----------------------------------------------------------------------------------------------------------
  21. * @create Oct 3, 2013 6:17:54 PM
  22. * @author 玄玉<http://blog.csdn.net/jadyer>
  23. */
  24. @Service
  25. public class UserService {
  26. private Map<String, String> usersData = new ConcurrentHashMap<String, String>();
  27.  
  28. public UserService(){
  29. System.out.println("用户数据初始化..开始");
  30. usersData.put("", "玄玉");
  31. usersData.put("", "我的博客:http://blog.csdn.net/jadyer");
  32. System.out.println("用户数据初始化..完毕");
  33. }
  34.  
  35. //将查询到的数据缓存到myCache中,并使用方法名称加上参数中的userNo作为缓存的key
  36. //通常更新操作只需刷新缓存中的某个值,所以为了准确的清除特定的缓存,故定义了这个唯一的key,从而不会影响其它缓存值
  37. @Cacheable(value="myCache", key="'get'+#userNo")
  38. public String get(String userNo){
  39. System.out.println("数据库中查到此用户号[" + userNo + "]对应的用户名为[" + usersData.get(userNo) + "]");
  40. return usersData.get(userNo);
  41. }
  42.  
  43. @CacheEvict(value="myCache", key="'get'+#userNo")
  44. public void update(String userNo){
  45. System.out.println("移除缓存中此用户号[" + userNo + "]对应的用户名[" + usersData.get(userNo) + "]的缓存");
  46. }
  47.  
  48. //allEntries为true表示清除value中的全部缓存,默认为false
  49. @CacheEvict(value="myCache", allEntries=true)
  50. public void removeAll(){
  51. System.out.println("移除缓存中的所有数据");
  52. }
  53. }
  1.  

上述参考文章没有讲到的部分知识点,从@参考文章2找了些资料做补充

  1. @Caching注解可以让我们在一个方法或者类上同时指定多个Spring Cache相关的注解。其拥有三个属性:cacheableputevict,分别用于指定@Cacheable@CachePut@CacheEvict
  2.  
  3. @Caching(cacheable = @Cacheable("users"), evict = { @CacheEvict("cache2"),
  4.  
  5. @CacheEvict(value = "cache3", allEntries = true) })
  6.  
  7. public User find(Integer id) {
  8.  
  9. returnnull;
  10.  
  11. }
  12.  
  13. 在支持Spring Cache的环境下,对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。@CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
  14.  
  15. @CachePut也可以标注在类上和方法上。使用@CachePut时我们可以指定的属性跟@Cacheable是一样的。
  16.  
  17. @CachePut("users")//每次都会执行方法,并将结果存入指定的缓存中
  18.  
  19. public User find(Integer id) {
  20.  
  21. returnnull;
  22.  
  23. }
  1. 上述2步骤后,就可以愉快的使用了!~

spring使用@Cache的简单实现的更多相关文章

  1. 使用Spring Security OAuth2进行简单的单点登录

    1.概述 在本教程中,我们将讨论如何使用Spring Security OAuth和Spring Boot实现SSO - 单点登录. 我们将使用三个单独的应用程序: 授权服务器 - 这是中央身份验证机 ...

  2. spring使用cache

    考虑两方面: i) 声明某些方法使用缓存(注解方式) ii) 配置Spring对Cache的支持. 一.基于注解的支持 一般我们常用的注解:@Cacheable和@CacheEvict. 1.1.@C ...

  3. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  4. Spring使用Cache、整合Ehcache

    http://haohaoxuexi.iteye.com/blog/2123030 Spring使用Cache 从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring ...

  5. Spring security oauth2最简单入门环境搭建

    关于OAuth2的一些简介,见我的上篇blog:http://wwwcomy.iteye.com/blog/2229889 PS:貌似内容太水直接被鹳狸猿干沉.. 友情提示 学习曲线:spring+s ...

  6. Spring使用Cache、整合Ehcache(转)

    今天在做Spring使用Cache.整合Ehcache时发现一篇非常好的文章,原文地址 http://elim.iteye.com/blog/2123030 从3.1开始,Spring引入了对Cach ...

  7. Spring的Cache注解

    Spring的Cache注解如下所示: @CacheConfig:主要用于配置该类中会用到的一些共用的缓存配置.在这里@CacheConfig(cacheNames = "users&quo ...

  8. Spring+Netty4实现的简单通信框架

    参考:http://cpjsjxy.iteye.com/blog/1587601 Spring+Netty4实现的简单通信框架,支持Socket.HTTP.WebSocket_Text.WebSock ...

  9. Spring整合JDBC实现简单的增删改

    Spring整合JDBC实现简单的增删改: 1.导入Spring的包和数据库的驱动包: 2.选择一个数据源(dbcp和C3P0) 3.导入数据源的包(这里我们使用dbcp) <span styl ...

随机推荐

  1. Pyqt4的事件与信号

    事件: 事件(Event)是GUI程序中很重要的一部分.它由用户或系统产生.当我们调用程序的exec_方法时,程序就会进入主循环中.主循环捕获事件并将它们发送给相应的对象进行处理. 信号与槽:     ...

  2. windbg蓝屏调试

    一般在写Windows内核程序的时候,经常会出现蓝屏的问题,这个时候一般是采用记录下dump文件然后用windbg查看得方式,具体的过程就不说了,网上一大堆的内容.现在我主要记录自己当初按照网上的方案 ...

  3. Undefined symbols for architecture arm64(其cpu架构)

    "_OBJC_CLASS_$_XXX",referenced from: 之类的问题,很多人看到这些很头疼,不知道从何下手去修改.以下是我总结的相关修改办法.如下图 这是一个很明显 ...

  4. TLD网络资源汇总--学习理解之(四)

    原文:http://blog.csdn.net/mysniper11/article/details/8726649 引文地址:http://www.cnblogs.com/lxy2017/p/392 ...

  5. 【jQuery】(7)---jQueryAjax同步异步区别

    jQueryAjax同步异步 今天在项目开发过程中,要实现这么一个功能 <!-- 当我点击就业的时候,触发onclick时间,check()方法里通过ajax请求返回数据, 如果该用户已经毕业可 ...

  6. 51Nod 1091 线段的重叠(贪心+区间相关,板子题)

    1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...

  7. 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...

  8. JAVA爬虫实践(实践四:webMagic和phantomjs和淘宝爬虫)

    webMagic虽然方便,但是也有它不适用的地方,比如定向的某个单页面爬虫,或者存在大量ajax请求,页面的跳转请求全都混淆在js里. 这时可以用webMagic结合phantomjs来真实模拟页面请 ...

  9. 配置 java web Tomcat

    index.jsp-->换为默认的MyEclipse JSP Editor打开方法:window -->Preference-->general-->editors--> ...

  10. 使用Android Studio过程中,停留在“Building ‘工程名’ Gradle project info”的解决方法

    http://www.loverobots.cn/in-the-process-of-using-studio-android-the-solution-of-the-project-info-gra ...