温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Spring中对类的级别进行缓存

发布时间:2021-03-22 16:46:28 来源:亿速云 阅读:172 作者:Leah 栏目:编程语言

这篇文章给大家介绍怎么在Spring中对类的级别进行缓存,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

一 、配置文件

<?xml version="1.0" encoding="GBK"?> <beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"    xmlns:cache="http://www.springframework.org/schema/cache"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd    http://www.springframework.org/schema/cache    http://www.springframework.org/schema/cache/spring-cache-4.0.xsd    http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-4.0.xsd">    <context:component-scan       base-package="org.crazyit.app.service" />    <cache:annotation-driven       cache-manager="cacheManager" />    <!-- 配置EhCache的CacheManager 通过configLocation指定ehcache.xml文件的位置 -->    <bean id="ehCacheManager"       class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"       p:configLocation="classpath:ehcache.xml" p:shared="false" />    <!-- 配置基于EhCache的缓存管理器 并将EhCache的CacheManager注入该缓存管理器Bean -->    <bean id="cacheManager"       class="org.springframework.cache.ehcache.EhCacheCacheManager"       p:cacheManager-ref="ehCacheManager">    </bean> </beans>

二 、属性文件

<?xml version="1.0" encoding="gbk"?> <ehcache>   <diskStore path="java.io.tmpdir" />    <!-- 配置默认的缓存区 -->   <defaultCache     maxElementsInMemory="10000"     eternal="false"     timeToIdleSeconds="120"     timeToLiveSeconds="120"     maxElementsOnDisk="10000000"     diskExpiryThreadIntervalSeconds="120"     memoryStoreEvictionPolicy="LRU"/>    <!-- 配置名为users的缓存区 -->   <cache name="users"     maxElementsInMemory="10000"     eternal="false"     overflowToDisk="true"     timeToIdleSeconds="300"     timeToLiveSeconds="600" /> </ehcache>

三 、领域模型

package org.crazyit.app.domain; public class User {    private String name;    private int age;    public User()    {}    public User(String name, int age)    {       super();       this.name = name;       this.age = age;    }    public String getName()    {       return name;    }    public void setName(String name)    {       this.name = name;    }    public int getAge()    {       return age;    }    public void setAge(int age)    {       this.age = age;    } }

四 、Service

1 接口类

package org.crazyit.app.service; import org.crazyit.app.domain.User; public interface UserService {    User getUsersByNameAndAge(String name, int age);    User getAnotherUser(String name, int age); }

2 实现类

package org.crazyit.app.service.impl; import org.crazyit.app.service.UserService; import org.crazyit.app.domain.User; import org.springframework.stereotype.Service; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.annotation.Scope; @Service("userService") @Cacheable(value = "users") public class UserServiceImpl implements UserService {   public User getUsersByNameAndAge(String name, int age)   {     System.out.println("--正在执行findUsersByNameAndAge()查询方法--");     return new User(name, age);   }   public User getAnotherUser(String name, int age)   {     System.out.println("--正在执行findAnotherUser()查询方法--");     return new User(name, age);   } }

五 、测试类

package lee; import org.crazyit.app.service.UserService; import org.crazyit.app.domain.User; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest {   public static void main(String[] args) {     ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");     UserService us = ctx.getBean("userService", UserService.class);     // 第一次调用us对象的方法时会执行该方法,并缓存方法的结果     User u1 = us.getUsersByNameAndAge("孙悟空", 500);     // 第二次调用us对象的方法时直接利用缓存的数据,并不真正执行该方法     User u2 = us.getAnotherUser("孙悟空", 500);     System.out.println(u1 == u2); // 输出true   } }

六 、测试结果

--正在执行findUsersByNameAndAge()查询方法--
true

关于怎么在Spring中对类的级别进行缓存就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI