`
futurep_p
  • 浏览: 66114 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring框架下缓存与工具类的结合

阅读更多

   实现缓存的方式有很多,而在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!

分享到:
评论

相关推荐

    Spring 缓存

    封装 Guava 缓存是使用 Guava 包中的缓存机制,创建一个缓存工具类,例如 `CacheContainer`: ```java package com.lh.common.util.cache; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; ...

    基于Spring的Web缓存

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

    Spring框架参考手册

    - **依赖注入与控制反转**:这是Spring框架的核心特性之一,通过控制反转(IoC)容器管理对象的生命周期,简化组件之间的依赖关系。 - **模块划分**:Spring框架被划分为几个核心模块: - **核心容器**:提供核心...

    spring-struts1-strust2-hibernate 核心包介绍

    这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个jar文件是所有应用...

    SSH和Spring框架简介

    SSH和Spring框架是Java开发中的两个重要工具,它们在企业级应用开发中占据了核心地位。SSH,是由Struts2、Spring和Hibernate三个框架组成的集成解决方案,而Spring则是一个全面的后端开发框架,包含了多种功能模块。...

    spring缓存

    本文档旨在详细介绍如何在Spring框架中集成和使用EHCache作为缓存解决方案,以提高应用程序性能,并实现跨服务器的集群缓存设计。文档覆盖了从基础概念到高级配置的所有方面,适用于对Java缓存和Spring框架有一定...

    09. Spring Boot缓存技术

    总之,Spring Boot的缓存技术为开发者提供了强大的工具来优化应用程序的性能。通过合理的配置和使用,我们可以有效地利用缓存,降低数据库压力,提升用户体验。在学习和使用过程中,理解不同缓存实现的特点和适用...

    Spring框架的设计理念与设计模式分析

    ### Spring框架的设计理念与设计模式分析 #### 一、Spring框架概述 Spring作为一个现代软件开发领域内备受推崇的框架,其设计理念与设计模式一直是开发者关注的焦点。Spring框架以其轻量级、模块化和可扩展性著称...

    struts2+hibernate+spring框架整合实列

    **Spring框架** 是一个全面的企业级应用框架,它提供了事务管理、AOP(面向切面编程)、依赖注入等功能。Spring的IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)机制可以帮助开发者...

    Spring框架整合Spring MVC与Hibernate实现

    它还提供了多种模块,如数据访问/集成、Web、AOP、工具支持等,可以灵活地与其他技术结合。 **Spring MVC** Spring MVC 是 Spring 框架的一部分,专门用于构建 Web 应用程序。它遵循模型-视图-控制器(MVC)设计...

    Java+redis缓存工具类(SSM)

    本项目提供了一个Java实现的Redis缓存工具类,结合SSM框架,可以帮助开发者快速地集成和管理Redis缓存。 首先,让我们了解一下Java中的SSM框架: 1. **Spring**:这是一个全面的开源应用框架,提供了依赖注入(DI)...

    spring redis 分布式缓存整合详细的注释说明

    Spring框架与Redis的集成,使得开发者可以充分利用Redis的高效特性和Spring的便捷性来构建分布式缓存系统。本教程将深入讲解如何进行Spring与Redis的整合,并提供详细的注释说明。 一、Spring Redis简介 Spring ...

    java spring框架介绍

    在实际开发中,Spring框架的使用通常会结合Spring Boot和Spring Data等项目,以简化配置和提升开发效率。Spring Data提供了一种统一的方式来访问各种数据存储,如JPA、MongoDB等,而Spring Security则提供了全面的...

    Spring 与Ehcache实现基于方法的缓存

    本篇文章将详细探讨如何在Spring框架中集成并实现基于方法的缓存机制,利用Ehcache来优化数据访问。 首先,我们需要理解Spring的AOP概念,AOP允许我们定义横切关注点,如日志、事务管理或,正如在这个案例中,缓存...

    Spring基于注解的缓存配置--web应用实例

    在本实例中,我们将深入探讨如何在Spring框架中利用注解来实现缓存配置,特别是在Web应用程序中的实际应用。Spring Cache是一个强大的功能,它允许我们高效地管理应用程序中的数据,减少不必要的数据库查询,提高...

    spring框架学习笔记

    同时,其提供的各种模板和工具类极大地简化了日常开发任务,使得Java应用的构建变得更加高效和便捷。通过深入理解并熟练运用这些概念和机制,开发者可以更好地利用Spring来构建高质量、可扩展的应用程序。

    01.Spring框架简介_spring_spring发展历程_

    **Spring框架简介** Spring框架是Java开发领域中最广泛使用的轻量级框架之一,自2003年首次发布以来,它极大地推动了企业级Java应用的发展。Spring的主要目标是简化Java开发,通过提供一个全面的编程和配置模型,...

    spring小结之配置二级缓存!

    在Spring框架中,二级缓存是一个重要的性能优化手段,它能显著提高数据访问的效率,尤其是在大型企业级应用中。本文将围绕“Spring小结之配置二级缓存”这一主题,详细阐述二级缓存的概念、作用以及如何在Spring中...

    spring jar 包详解

    - **功能简介**:这是 Spring 框架的核心库,包含了 Spring 框架基本的核心工具类,其他组件都会依赖这个包里的类。例如,用于对象创建、销毁等生命周期管理的相关工具。 - **应用场景**:适用于所有需要使用 Spring...

    基于Spring MVC的web框架 1.1.11

    工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...

Global site tag (gtag.js) - Google Analytics