实现缓存的方式有很多,而在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!
分享到:
相关推荐
这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个jar文件是所有应用...
(1) spring-core.jar 这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个...
工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...
spring-**core**-4.3.6.RELEASE.jar :包含spring框架基本的核心工具类,spring其他组件都要用到这个包里的类,其他组件的基本核心 spring-**beans**-4.3.6.RELEASE.jar:所有应用都要用到的jar包,它包含访问配置...
spring-core.jar(必须):这个jar 文件包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 外部依赖Commons ...
工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...
这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个jar文件是所有应用都要...
SingleJDBCBase 是基于Spring Framework基础上搭建的一个Java基础开发套件,以Spring MVC为模型视图控制器,JDBC为数据访问层。 * 核心框架:Spring Framework 4.2.7 ...* 工具类:fasterxml 2.8.7、junit 4.12、
humbrown以spring+mybatis为框架的jee开发基础包,提供用于开发业务对象、dao、service、缓存、安全等业务的基类对象和相关工具类。项目选型:MVC框架:Spring mvc,使用Thymeleaf渲染view应用层:Spring 3持久层:...
工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...
包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 18. spring-webmvc-4.1.1.RELEASE.jar 包含...
这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个jar文件是所有应用都要...
【源码】mysql版本_spring3.0 系统模块 1. 组织管理:角色管理,分角色组和成员,有组权限和成员权限。 2. 系统用户:对各个基本的组会员增删改查,单发、群发邮件短信,导入导出excel表格,批量删除 3. 会员管理:...
基于spring boot搭建的web基础框架,包含了web开发中常用的功能,如:缓存(redis)、日志、事务、JPA、shiro、安全、常用工具类、swagger2在线接口文档、跨域支持等,可以基于该项目快速进行公司内部的项目开发。
SingleMyBatis 是基于Spring Framework基础上搭建的一个Java基础开发套件,以Spring MVC为模型视图控制器,MyBatis为数据访问层。 * 核心框架:Spring Framework 4.2.7 ...* 工具类:fasterxml 2.8.7、junit 4.12、
SingleHibernate 是基于Spring Framework基础上搭建的一个Java基础开发套件,以Spring MVC为模型视图控制器,Hibernate为数据访问层。 * 核心框架:Spring Framework 4.2.7 ...* 工具类:fasterxml 2.8.7、junit 4.12、
工具类:Hutool 5.5.1 SpringBoot+MyBatis-Plus+Mysql+Vue实现智慧园区管理系统 软件架构 核心框架:Spring Boot 2.4.0 安全框架:JwtPermission 3.1.1 前端:Ant Design Vue 1.6.2 持久层框架:MyBatis-Plus 3.4.1...
提供了包含shiro框架需要的全部jar包(包括缓存配置、spring整合等等)以及源码。
工具类:Apache Commons、FastJson、EASYPOI、BladeToolBox 2、前端 JS框架:jQuery CSS框架:Twitter Bootstrap 客户端验证:JQuery-html5Validate 富文本:KindEcitor 数据表格:jqGrid 树结构控件:...
18.3. 使用Spring提供的辅助类实现EJB组件 19. JMS 19.1. 简介 19.2. 使用Spring JMS 19.2.1. JmsTemplate 19.2.2. 连接工厂 19.2.3. (消息)目的地管理 19.2.4. 消息侦听容器 19.2.5. 事务管理 19.3. 发送...