此文章为转自他人博客
定义数据访问接口:
01 |
package org.kevin.cache.dao;
|
03 |
import java.util.Collection;
|
05 |
import org.kevin.cache.domain.Data;
|
07 |
public interface DataDAO {
|
09 |
public void add(Data data);
|
11 |
public void update(Data data);
|
13 |
public Data find(Integer id);
|
15 |
public void delete(Integer id);
|
17 |
public Collection<Data> getAll();
|
对接口方法进行实现,使用Map模拟数据库的表进行存储数据:
01 |
package org.kevin.cache.dao;
|
03 |
import java.util.Collection;
|
04 |
import java.util.HashMap;
|
07 |
import org.kevin.cache.domain.Data;
|
08 |
import org.springframework.cache.annotation.CacheEvict;
|
09 |
import org.springframework.cache.annotation.Cacheable;
|
11 |
public class DataDAOImpl implements DataDAO {
|
13 |
private Map<Integer, Data> dataMap = new HashMap<>();
|
16 |
@CacheEvict (value = "data" , allEntries = true )
|
17 |
public void add(Data data) {
|
18 |
System.out.println( "Execute:public void add(Data data)" );
|
19 |
dataMap.put(data.getId(), data);
|
23 |
@CacheEvict (value = "data" , allEntries = true )
|
24 |
public void update(Data data) {
|
25 |
System.out.println( "Execute:public void update(Data data) " );
|
26 |
dataMap.put(data.getId(), data);
|
30 |
@Cacheable (value = "data" )
|
31 |
public Data find(Integer id) {
|
32 |
System.out.println( "Execute:public Data find(Integer id)" );
|
33 |
return dataMap.get(id);
|
37 |
@CacheEvict (value = "data" , allEntries = true )
|
38 |
public void delete(Integer id) {
|
39 |
System.out.println( "Execute:public void delete(Integer id)" );
|
44 |
@Cacheable (value = "data" )
|
45 |
public Collection<Data> getAll() {
|
46 |
System.out.println( "Execute:public Collection<Data> getAll()" );
|
47 |
return dataMap.values();
|
如上,对数据进行增删改的时候清空缓存,查询时使用缓存。其中value为缓存区,allEntries表示清空缓存区中的所有数据。为了稍后验证缓存是否生效,打印出执行的方法签名。
定义领域模型:
01 |
package org.kevin.cache.domain;
|
07 |
private String second;
|
09 |
public Data(Integer id, String first, String second) {
|
15 |
public String getFirst() {
|
19 |
public void setFirst(String first) {
|
23 |
public String getSecond() {
|
27 |
public void setSecond(String second) {
|
31 |
public void setId(Integer id) {
|
35 |
public Integer getId() {
|
接下来编写spring配置文件:
01 |
< beans xmlns = "http://www.springframework.org/schema/beans"
|
02 |
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:p = "http://www.springframework.org/schema/p"
|
03 |
xmlns:cache = "http://www.springframework.org/schema/cache"
|
05 |
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
|
06 |
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
|
08 |
< cache:annotation-driven />
|
10 |
< bean id = "cacheManager" class = "org.springframework.cache.support.SimpleCacheManager" >
|
11 |
< property name = "caches" >
|
13 |
< bean class = "org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name = "default" />
|
14 |
< bean class = "org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name = "data" />
|
19 |
< bean id = "dataDao" class = "org.kevin.cache.dao.DataDAOImpl" />
|
最后编写main方法验证缓存是否生效:
01 |
package org.kevin.cache;
|
03 |
import java.util.Collection;
|
05 |
import org.kevin.cache.dao.DataDAO;
|
06 |
import org.kevin.cache.domain.Data;
|
07 |
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
09 |
public class CacheMain {
|
11 |
public static void main(String[] args) {
|
13 |
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "spring-cache-demo.xml" );
|
14 |
DataDAO dataDAO = context.getBean( "dataDao" , DataDAO. class );
|
16 |
dataDAO.add( new Data( 1 , "li" , "wenkai" ));
|
17 |
Collection<Data> dataCollection = dataDAO.getAll();
|
18 |
System.out.println(dataCollection.size());
|
20 |
System.out.println( "=================================" );
|
22 |
dataDAO.add( new Data( 2 , "jack" , "lee" ));
|
23 |
dataCollection = dataDAO.getAll();
|
24 |
System.out.println(dataCollection.size());;
|
25 |
Data data = dataDAO.find( 1 );
|
26 |
System.out.println(data.getFirst());
|
27 |
data = dataDAO.find( 2 );
|
28 |
System.out.println(data.getFirst());
|
29 |
data = dataDAO.find( 2 );
|
30 |
System.out.println(data.getFirst());;
|
32 |
System.out.println( "====================================" );
|
33 |
dataDAO.add( new Data( 3 , "kevin" , "lee" ));
|
34 |
data = dataDAO.find( 2 );
|
35 |
System.out.println(data.getFirst());
|
36 |
data = dataDAO.find( 3 );
|
37 |
System.out.println(data.getFirst());
|
38 |
data = dataDAO.find( 2 );
|
39 |
System.out.println(data.getFirst());
|
打印接过如下,表示已经生效:
01 |
Execute:public void add(Data data) |
02 |
Execute:public Collection< Data > getAll()
|
04 |
================================= |
05 |
Execute:public void add(Data data) |
06 |
Execute:public Collection< Data > getAll()
|
08 |
Execute:public Data find(Integer id) |
10 |
Execute:public Data find(Integer id) |
13 |
==================================== |
14 |
Execute:public void add(Data data) |
15 |
Execute:public Data find(Integer id) |
17 |
Execute:public Data find(Integer id) |
最后,spring支持的缓存机制,是方法级的缓存,而不关注底层是否使用了数据库以及通过什么方式访问的数据库;因此这种缓存不止可以放到DAO层,也可以放置到Service层,甚至可以对各种代码数据进行缓存。
如果应用中同时使用了Hibernate和Ibatis,或者这种方式是一种好的缓存解决方案。
分享到:
相关推荐
spring3.1.1常用jar包,放在这里
spring3.1.1最新jar包
spring-framework-3.1.1.RELEASE.zip spring-framework-3.1.1.RELEASE-with-docs.zip
以前用习惯了Hibernate, 开始接触Mybatis,同样是ORM, MyBatis确实很轻巧,正好也可以自己练练SQL,整合了maven版的spring3.1.1 + mybatis3.1.1,希望对你有帮助。
Spring3.1.1 jar包
mongodb + spring3.1.1增删改查例子,修改了JAR包冲突的BUG。可运行。
这是我通过Spring官网上下载的docs,自己生成的CHM形式的API,自己用了一下感觉还不错。所以希望能给那些初学Spring同学提供一些帮助。
spring 3.1.1
org.springframework.aop-3.1.1.RELEASE org.springframework.asm-3.1.1.RELEASE org.springframework.aspects-3.1.1.RELEASE org.springframework.beans-3.1.1.RELEASE org.springframework.context.support-3.1.1....
Srping3.1.1核心jar包 spring3.1.1.jar
Spring 3.1.1 API doc CHM格式
spring 3.1.1完全包带doc 三部分
springMVC所需的spring jar包
SpringMVC + spring3.1.1 + hibernate4.1.0
搭建ssh框架,spring3.1.1 相关Jar包
完整的spring3.1.1库文件,jar包,配置Eclipse开发spring3.1.1项目必须添加的依赖。懂的人都知道的!解压缩后180M!
quartz2.2.1 spring3.1.1,quartz含源码(src文件夹,通过eclipse导入源码时,选择导入文件夹即可)
spring-framework-3.1.1 源码
spring3.1.1 sturts2.3.1 hibernate3.3.2框架整合
http://blog.csdn.net/luojiming1990/article/details/8959387