实现缓存的方式有很多,而在spring框架下,通常我们可以通过它的单例模式简单达到缓存对象的目的。
这里着重介绍缓存信息如何达到在系统启动时初始化,并延伸出简单的使用缓存工具类,达到两者较好的结合效果。
下面首先介绍缓存老大,缓存工厂(CacheFactory),因为下面所有的说明都以此为依据,那么先看看这个缓存工厂的定义吧。
/**
* <p>缓存工厂</p>
*/
public interface CacheFactory {
/**
* 刷新配置中的所有缓存
*/
public void refresh();
/**
* 获取缓存配置
* @param cacheTypeEnum 缓存类型
* @return
*/
public Map<String, CachedObject> getCacheByType(CacheTypeEnum cacheTypeEnum);
}
缓存工厂包含两个方法,一个是缓存刷新,一个是获取某个类型下的缓存内容。(这里说的CacheTypeEnum也就是缓存类型枚举定义,自己可以根据业务需要添加。)
这是缓存最基本的要求,即数据的输入和输出。掩藏在缓存工厂下面的就是具体业务的缓存模具了,针对不同的业务,你可以从数据库、或者从文件等数据来源获取需要缓存的信息,具体实现这里就不赘述,相信实现这个不复杂。
现在我们关心的问题是,现在有了这个缓存工厂,难道在每次需要用缓存数据的时候再注入CacheFactory实例来获取,这样就到处充斥着缓存的东西了,为了让业务不关心这些琐碎的事情,可以引入具体业务的缓存工具。如AreaUtil地区信息工具类,在此工具类里完成对缓存工厂的封装。我们可以抽出一个缓存工具基类,所有其他业务工具类继承此类。
/**
* <p>缓存工具基类</p>
*/
public class CacheUtilBase {
/** 缓存工厂
*
* 所有子类都共用一份引用,此引用在<code>cacheFactory</code>初始化完成时设置
*/
protected static CacheFactory cacheFactory;
public static void setCacheFactory(CacheFactory cacheFactory) {
CacheUtilBase.cacheFactory = cacheFactory;
}
}
这里也随之带来了我们需要关心的问题,即我们希望通过static的方式访问工具类方法,所以cacheFactory属性也必须是static的。那什么时候来初始化这个工厂实例呢?废话,肯定要在工厂实例初始化完成之后喽,呵呵。那你怎么
知道他初始化完成了呢,这个时候可以通过实现spring的BeanPostProcessor接口,在此实现中完成两件事:1、刷新缓存工厂下的所有缓存;2、初始化缓存工具基类的工厂实例属性。
/**
* <p>容器bean初始化处理实现</p>
*
* 针对bean初始化完成前后的特殊处理在此完成。
*/
public class InstantiationBeanPostProcessor implements BeanPostProcessor {
private static final Logger logger = Logger.getLogger(InstantiationBeanPostProcessor.class);
/*
* (non-Javadoc)
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object, java.lang.String)
*/
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
// 初始化缓存
if (bean instanceof CacheFactory) {
if (logger.isInfoEnabled()) {
logger.info("执行缓存初始化");
}
CacheFactory cacheFactory = (CacheFactory) bean;
// 初始化工具类缓存信息
CacheUtilBase.setCacheFactory(cacheFactory);
// 缓存刷新
cacheFactory.refresh(true);
}
return bean;
}
/*
* (non-Javadoc)
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object, java.lang.String)
*/
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
// do nothing
return bean;
}
}
通过注册InstantiationBeanPostProcessor,spring在初始化bean实例的时候就会可以完成对缓存工厂实例的操作了,这样就大功告成了。
系统启动之日,即缓存工作之时,yeah!
分享到:
相关推荐
封装 Guava 缓存是使用 Guava 包中的缓存机制,创建一个缓存工具类,例如 `CacheContainer`: ```java package com.lh.common.util.cache; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; ...
总的来说,基于Spring的Web缓存涉及到Spring框架的缓存抽象、注解驱动的缓存逻辑、Maven依赖管理和实际缓存实现的选择与配置。理解并熟练掌握这些知识点,将有助于构建高性能、低延迟的Web应用。开发者需要考虑缓存...
- **依赖注入与控制反转**:这是Spring框架的核心特性之一,通过控制反转(IoC)容器管理对象的生命周期,简化组件之间的依赖关系。 - **模块划分**:Spring框架被划分为几个核心模块: - **核心容器**:提供核心...
这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个jar文件是所有应用...
SSH和Spring框架是Java开发中的两个重要工具,它们在企业级应用开发中占据了核心地位。SSH,是由Struts2、Spring和Hibernate三个框架组成的集成解决方案,而Spring则是一个全面的后端开发框架,包含了多种功能模块。...
本文档旨在详细介绍如何在Spring框架中集成和使用EHCache作为缓存解决方案,以提高应用程序性能,并实现跨服务器的集群缓存设计。文档覆盖了从基础概念到高级配置的所有方面,适用于对Java缓存和Spring框架有一定...
总之,Spring Boot的缓存技术为开发者提供了强大的工具来优化应用程序的性能。通过合理的配置和使用,我们可以有效地利用缓存,降低数据库压力,提升用户体验。在学习和使用过程中,理解不同缓存实现的特点和适用...
### Spring框架的设计理念与设计模式分析 #### 一、Spring框架概述 Spring作为一个现代软件开发领域内备受推崇的框架,其设计理念与设计模式一直是开发者关注的焦点。Spring框架以其轻量级、模块化和可扩展性著称...
**Spring框架** 是一个全面的企业级应用框架,它提供了事务管理、AOP(面向切面编程)、依赖注入等功能。Spring的IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)机制可以帮助开发者...
它还提供了多种模块,如数据访问/集成、Web、AOP、工具支持等,可以灵活地与其他技术结合。 **Spring MVC** Spring MVC 是 Spring 框架的一部分,专门用于构建 Web 应用程序。它遵循模型-视图-控制器(MVC)设计...
本项目提供了一个Java实现的Redis缓存工具类,结合SSM框架,可以帮助开发者快速地集成和管理Redis缓存。 首先,让我们了解一下Java中的SSM框架: 1. **Spring**:这是一个全面的开源应用框架,提供了依赖注入(DI)...
Spring框架与Redis的集成,使得开发者可以充分利用Redis的高效特性和Spring的便捷性来构建分布式缓存系统。本教程将深入讲解如何进行Spring与Redis的整合,并提供详细的注释说明。 一、Spring Redis简介 Spring ...
在实际开发中,Spring框架的使用通常会结合Spring Boot和Spring Data等项目,以简化配置和提升开发效率。Spring Data提供了一种统一的方式来访问各种数据存储,如JPA、MongoDB等,而Spring Security则提供了全面的...
本篇文章将详细探讨如何在Spring框架中集成并实现基于方法的缓存机制,利用Ehcache来优化数据访问。 首先,我们需要理解Spring的AOP概念,AOP允许我们定义横切关注点,如日志、事务管理或,正如在这个案例中,缓存...
在本实例中,我们将深入探讨如何在Spring框架中利用注解来实现缓存配置,特别是在Web应用程序中的实际应用。Spring Cache是一个强大的功能,它允许我们高效地管理应用程序中的数据,减少不必要的数据库查询,提高...
同时,其提供的各种模板和工具类极大地简化了日常开发任务,使得Java应用的构建变得更加高效和便捷。通过深入理解并熟练运用这些概念和机制,开发者可以更好地利用Spring来构建高质量、可扩展的应用程序。
**Spring框架简介** Spring框架是Java开发领域中最广泛使用的轻量级框架之一,自2003年首次发布以来,它极大地推动了企业级Java应用的发展。Spring的主要目标是简化Java开发,通过提供一个全面的编程和配置模型,...
在Spring框架中,二级缓存是一个重要的性能优化手段,它能显著提高数据访问的效率,尤其是在大型企业级应用中。本文将围绕“Spring小结之配置二级缓存”这一主题,详细阐述二级缓存的概念、作用以及如何在Spring中...
- **功能简介**:这是 Spring 框架的核心库,包含了 Spring 框架基本的核心工具类,其他组件都会依赖这个包里的类。例如,用于对象创建、销毁等生命周期管理的相关工具。 - **应用场景**:适用于所有需要使用 Spring...
工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...