`

注解驱动的缓存

阅读更多

注解驱动的缓存

除了前面介绍的基于XML的缓存配置,Spring Modules还支持使用代码级元数据声明缓存。这种支持有两种形式:

Java 5注解:如果目标环境是Java 5平台,这就是很理想的解决方案。

Jakarta公共属性:如果目标环境是Java 5以前的平台,就应该选择它。
对于RoadRantz程序来说,其目标环境是Java 5,所以我们要使用Java 5注解来声明DAO层的缓存。对于缓存,Spring Modules提供了两个注解:

@Cacheable:声明一个方法的返回值应该被缓存。

@CacheFlush:声明一个方法是清空缓存的触发器。

利用@Cacheable注解,我们可以像下面这样把getRantsForDay()声明为要被缓存的:

  

modelId属性指定用于缓存方法返回值的模型,稍后我们介绍说明如何定义缓存模型,现在先来看一看如何使用@CacheFlush来指定saveRant()被调用时的缓存清空操作:

 

  

modelId属性指定的刷新模型会在saveRant()方法被调用时被清空。

既然说到缓存模型和刷新模型,那么它们是从何而来的呢?元素被用于启动Spring Modules对注解的支持,我们会在roadrantzcache.xml文件里像下面这样配置它:

  

在元素里,必须配置至少一个元素,它就定义了一个缓存模型。简单 来说,缓存模型基本上就是对ehcache.xml里配置的一个缓存的引用。本例中,我们把rantzCacheModel与名为rantzCache的 缓存关联起来,这样一来,任何modelId是rantzCacheModel的@Cacheable都会使用名为rantzCache的缓存。

刷新模型与缓存模型相当类似,只是它引用的是要被刷新的缓存。下面使用元素创建一个名为rantzFlushModel的刷新模型:

 

设置缓存模型与刷新模型的不同之处在于,刷新模型不仅决定要清空哪个缓存,还决定了何时清空。在默认情况下,缓存是在@CacheFlush注解的方法被调用之后清空的,但我们可以通过指定<ehcache:flushing>的when属性来改变:

  

把when属性设置为before之后,缓存就会@CacheFlush注解的方法被调用之前清空。

分享到:
评论

相关推荐

    Ehcache+xmemcached+redis 整合spring注解demo

    这个测试可能涵盖了如何配置Spring的缓存抽象,如何定义缓存命名空间,如何使用注解驱动缓存操作,以及如何处理缓存异常等场景。 6. **应用场景**: 这种多缓存技术的整合方案适用于需要高度可扩展和高性能的系统,...

    Spring基于注解的缓存配置--EHCache AND OSCache

    2. **注解驱动的缓存** - `@Cacheable`:这个注解用于标记那些可以被缓存的方法。当方法被调用时,Spring会检查缓存中是否存在该方法的返回结果,如果存在,则直接返回,否则执行方法并存储结果到缓存中。 - `@...

    redis-string-springcache.zip

    3. 使用注解驱动缓存 通过在方法上添加`@Cacheable`、`@CacheEvict`、`@CachePut`等注解,可以轻松地实现缓存的存取和更新。例如,`@Cacheable(value = "books", key = "#isbn")`表示根据isbn获取图书信息并缓存。 ...

    spring整合ehCache

    Spring整合EhCache是将...5. 可选地,利用Spring的注解驱动缓存机制,简化代码中的缓存逻辑。 通过这种方式,我们可以充分利用EhCache的缓存能力,提高Spring应用的性能,减少不必要的数据库访问,优化用户体验。

    spring注解驱动

    以上只是Spring注解驱动的一部分内容,实际使用中还有许多其他的注解,如`@Cacheable`用于缓存,`@Async`用于异步调用等。通过这些注解,Spring提供了强大的功能,使得开发者能更加专注于业务逻辑,而不是繁琐的配置...

    Spring注解驱动之AOP功能测试

    Spring注解驱动之AOP功能测试 Spring框架提供了一个强大的功能,即Aspect-Oriented Programming(面向方面编程),也就是AOP。AOP是一种编程范式,它提供了一种将横切关注点模块化的方法,例如日志记录、安全检查...

    (源码)基于Spring框架的缓存管理系统.zip

    1. 注解驱动的缓存管理通过Cacheable、CachePut、CacheEvict等注解,开发者可以方便地定义缓存操作,而无需手动编写复杂的缓存逻辑。 2. 多级缓存支持支持多种缓存实现,如基于ConcurrentMap的本地缓存和分布式缓存...

    spring缓存机制-自定义缓存(五, 六)

    Spring缓存抽象是基于Java的注解驱动的,它提供了声明式缓存管理。核心组件包括`@Cacheable`、`@CacheEvict`、`@CachePut`等注解,这些注解可以直接应用在方法上,指示Spring在适当的时候进行缓存操作。 1. `@...

    分布式多级缓存实践

    2. **注解驱动的缓存**:在服务方法上使用`@Cacheable`、`@CacheEvict`和`@CachePut`等注解,实现缓存的存取和清除。 3. **缓存更新策略**:设置缓存更新规则,如使用Redis的`pub/sub`机制监听数据变更,当一级缓存...

    点智数码--注释驱动的-Spring-cache-缓存的介绍.doc

    Spring Cache 是 Spring 框架从 3.1 版本开始引入的一种注解驱动的缓存抽象,它提供了一种简单而灵活的方式来在应用程序中实现缓存功能,无需依赖特定的缓存实现,如 EhCache 或 OSCache。Spring Cache 的核心特性...

    springboot缓存一致性解决

    - **事件驱动**:当数据库中的数据发生变化时,可以监听这些事件,然后触发相应的缓存清除或更新操作。 - **缓存穿透**:防止无效数据的查询,通过布隆过滤器或者预加载机制,确保缓存中存储的数据有效。 - **...

    基于Spring的Web缓存

    总的来说,基于Spring的Web缓存涉及到Spring框架的缓存抽象、注解驱动的缓存逻辑、Maven依赖管理和实际缓存实现的选择与配置。理解并熟练掌握这些知识点,将有助于构建高性能、低延迟的Web应用。开发者需要考虑缓存...

    springMVC+Ehcache的各级缓存(包括页面缓存)

    - 方法级缓存:使用`@Cacheable`注解标记方法,每次调用该方法时,会首先检查缓存中是否有结果,如果有则直接返回,否则执行方法并将结果存入缓存。 - 类级缓存:整个类的所有方法共享同一份缓存,适用于所有方法...

    pring4新特性缓存框架增强共6页.pdf.zip

    这种抽象是基于注解驱动的,使得缓存管理更加简洁和直观。 1. `@Cacheable` 注解:这个注解可以应用在方法上,表示该方法的返回结果应该被缓存。当方法被调用时,如果缓存中存在相应的键值,则会从缓存中返回结果,...

    SpringCache缓存初探共5页.pdf.zip

    首先,SpringCache基于Java的注解驱动,允许开发者通过在方法上添加注解来启用缓存。例如,`@Cacheable`、`@CacheEvict` 和 `@CachePut` 注解分别用于缓存方法结果、清除指定缓存和更新缓存内容。这些注解使得缓存...

    hibernate二级缓存java包下载

    Hibernate 支持事件驱动的更新机制,如监听器(Listener)和拦截器(Interceptor),以便在数据变更后正确处理缓存。 7. **缓存过期与失效**: - 设置缓存项的生命周期或基于访问频率来决定何时清理缓存,防止内存...

    spring缓存

    Spring的缓存抽象提供了注解驱动的缓存管理,支持缓存的自动初始化、失效策略、缓存穿透处理等功能。EHCache作为流行的选择,它具有内存和磁盘存储、缓存分区、缓存预热等特性。 1.3 环境 本示例将基于Java运行环境...

    spring缓存机制-入门实例

    - 更新缓存的方式有定时刷新、手动触发和事件驱动等。Spring支持基于注解的触发(如`@CacheEvict`)和监听缓存事件进行更新。 通过以上概念的介绍,我们可以看到Spring缓存机制的灵活性和强大性。在实际项目中,...

    hibernate 二级缓存

    2. 缓存失效:合理设置缓存过期时间或使用事件驱动的缓存清理机制,确保缓存中的数据与数据库保持同步。 3. 性能调优:根据系统负载和硬件资源,调整缓存大小和并发级别,避免内存溢出。 4. 安全性:不要缓存敏感...

    hibernate _annotation 注解编程

    - **实体缓存**:使用 `@Cacheable` 和 `@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)` 等注解来控制实体的缓存策略。 #### 三、查询映射 - **JP-QL/HQL 查询映射**:通过 `@NamedQuery` 注解定义...

Global site tag (gtag.js) - Google Analytics