spring缓存实例

这篇文章主要是对上一篇文章介绍的spring缓存的技术进行的实现,可以在这里下载源码。首先定义一个参数类,用来接收参数

Parametres

package org.springframework.democache.model;

import java.io.Serializable;

public class Parametres implements Serializable{
	
	private Long param1;
	private String param2;
	private String param3;
	public Long getParam1() {
		return param1;
	}
	public void setParam1(Long param1) {
		this.param1 = param1;
	}
	public String getParam2() {
		return param2;
	}
	public void setParam2(String param2) {
		this.param2 = param2;
	}
	
	public Parametres() {
		super();
	}
	public Parametres(Long param1, String param2, String param3) {
		super();
		this.param1 = param1;
		this.param2 = param2;
		this.param3 = param3;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((param1 == null) ? 0 : param1.hashCode());
		result = prime * result + ((param2 == null) ? 0 : param2.hashCode());
		result = prime * result + ((param3 == null) ? 0 : param3.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Parametres other = (Parametres) obj;
		if (param1 == null) {
			if (other.param1 != null)
				return false;
		} else if (!param1.equals(other.param1))
			return false;
		if (param2 == null) {
			if (other.param2 != null)
				return false;
		} else if (!param2.equals(other.param2))
			return false;
		if (param3 == null) {
			if (other.param3 != null)
				return false;
		} else if (!param3.equals(other.param3))
			return false;
		return true;
	}
}

Repose用来接收参数

package org.springframework.democache.model;

import java.io.Serializable;

public class Reponse implements Serializable{
	
	private Long id;
	private String valeur;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getValeur() {
		return valeur;
	}
	public void setValeur(String valeur) {
		this.valeur = valeur;
	}
	public Reponse(Long id, String valeur) {
		super();
		this.id = id;
		this.valeur = valeur;
	}
	public Reponse() {
		super();
	}
	
	public boolean equals(Object other) {
		if(!(other instanceof Reponse)) {
			return false;
		}
		Reponse otherReponse = (Reponse) other;
		return id == otherReponse.id && valeur == otherReponse.valeur;
	}

	public int hashCode() {
		return id.intValue();
	}

}

service实现

package org.springframework.democache.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.democache.model.Parametres;
import org.springframework.democache.model.Reponse;
import org.springframework.stereotype.Service;

@Service
public class ServiceCacher {

    private static final Logger logger = LoggerFactory.getLogger(ServiceCacher.class);

	@Cacheable("dataCache")
	public Reponse getDatas(Parametres params){
		logger.info("execution getDatas()");
		Reponse Reponse=null;
		if(params!=null){
			Reponse=new Reponse(params.getParam1(), params.getParam2());
		}
		return Reponse;
	}

	
	@Cacheable(value="dataCache",condition="#params.param1>100")
	public Reponse getDatasWithCondition(Parametres params){
		logger.info("execution getDatasWithCondition()");
		Reponse Reponse=null;
		if(params!=null){
			Reponse=new Reponse(params.getParam1(), params.getParam2());
		}
		return Reponse;
	}
	
	
	@Cacheable(value="dataCache",key="#params.param1")
	public Reponse getDatasWithKey(Parametres params){
		logger.info("execution getDatasWithKey()");
		Reponse Reponse=null;
		if(params!=null){
			Reponse=new Reponse(params.getParam1(), params.getParam2());
		}
		return Reponse;
	}
	
	@CacheEvict(value="dataCache",allEntries=true)
	public void viderCacheData(){
		
	}
	
	@CachePut("dataCache")
	public Reponse getDatasWithPut(Parametres params){
		logger.info("execution getDatasWithPut()");
		Reponse Reponse=null;
		if(params!=null){
			Reponse=new Reponse(params.getParam1(), params.getParam2());
		}
		return Reponse;
	}

}

测试类

package org.springframework.democache.tests;

import static org.fest.assertions.Assertions.assertThat;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.democache.model.Parametres;
import org.springframework.democache.model.Reponse;
import org.springframework.democache.service.ServiceCacher;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/test-application-context.xml"})
public class ServiceCacheTest {

    public static final Logger logger = LoggerFactory.getLogger(ServiceCacheTest.class);

    @Autowired
    private ServiceCacher service;

    @Test
    public void testCache() {
    	logger.info("Appel 1");
    	Reponse rep=service.getDatas(new Parametres(10L,"param1","param2"));
        assertThat(rep).isNotNull();
        
        logger.info("Appel 2");
        Reponse rep2=service.getDatas(new Parametres(10L,"param1","param2"));
        assertThat(rep2).isNotNull();
        assertThat(rep).isSameAs(rep2);
    }

    @Test
    public void testCacheCondition() {
    	logger.info("Appel 1");
    	Reponse rep1=service.getDatasWithCondition(new Parametres(90L,"param12","param22"));
        assertThat(rep1).isNotNull();
        logger.info("Appel 2");
        Reponse rep2=service.getDatasWithCondition(new Parametres(90L,"param12","param22"));
        assertThat(rep2).isNotNull();
        assertThat(rep1).isNotSameAs(rep2);
        assertThat(rep1).isEqualTo(rep2);

        Reponse rep3=service.getDatasWithCondition(new Parametres(110L,"param13","param23"));
        assertThat(rep3).isNotNull();
        logger.info("Appel 4");
        Reponse rep4=service.getDatasWithCondition(new Parametres(110L,"param13","param23"));
        assertThat(rep4).isNotNull();
        assertThat(rep3).isSameAs(rep4);
    }
    
    @Test
    public void testCacheKey() {

    	logger.info("Appel 1");
    	Reponse rep1=service.getDatasWithKey(new Parametres(90L,"param12","param22"));
        assertThat(rep1).isNotNull();
        logger.info("Appel 2");
        Reponse rep2=service.getDatasWithKey(new Parametres(90L,"param123","param223"));
        assertThat(rep2).isNotNull();
        assertThat(rep1).isSameAs(rep2);
        
        Reponse rep3=service.getDatasWithKey(new Parametres(110L,"param13","param23"));
        assertThat(rep3).isNotNull();
        logger.info("Appel 4");
        Reponse rep4=service.getDatasWithKey(new Parametres(30L,"param13","param23"));
        assertThat(rep4).isNotNull();
        assertThat(rep3).isNotSameAs(rep4);
        assertThat(rep3).isNotEqualTo(rep4);
    }
   
    @Test
    public void testCacheEvict() {
    	logger.info("Appel 1");
    	Reponse rep1=service.getDatas(new Parametres(90L,"param1","param2"));
        assertThat(rep1).isNotNull();
        logger.info("Appel 2");
        Reponse rep2=service.getDatas(new Parametres(90L,"param1","param2"));
        assertThat(rep2).isNotNull();
        assertThat(rep1).isSameAs(rep2);
        
        service.viderCacheData();

        logger.info("Appel 3");
        Reponse rep3=service.getDatas(new Parametres(90L,"param1","param2"));
        assertThat(rep3).isNotNull();
        assertThat(rep3).isNotSameAs(rep2);
        assertThat(rep3).isEqualTo(rep2);
    }
    
    @Test
    public void testCachePut() {
    	logger.info("Appel 1");
    	Reponse rep1=service.getDatas(new Parametres(90L,"param1","param2"));
        assertThat(rep1).isNotNull();
        logger.info("Appel 2");
        Reponse rep2=service.getDatas(new Parametres(90L,"param1","param2"));
        assertThat(rep2).isNotNull();
        assertThat(rep1).isSameAs(rep2);
        logger.info("Appel 3");
        Reponse rep3=service.getDatasWithPut(new Parametres(90L,"param1","param2"));
        assertThat(rep3).isNotNull();
        assertThat(rep3).isNotSameAs(rep2);
        assertThat(rep3).isEqualTo(rep2);
    }
}

具体的分析可以看上一篇文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值