利用Spring AOP 缓存方法结果集(上)

我们都知道Hibernate可以用ehcache来作为Second Level Cache.主要是针对POJO的缓存,而且缓存的读取

在Hibernate中是写死.实际运用中感觉很不灵活.今天看到一篇介绍利用Spring Interceptor 来缓存指定

方法结果的例子,感觉很不错,充分体会到AOP的强大力量 :)

首先配置ehcache.xml

 <ehcache>

 


    <diskStore path="java.io.tmpdir"/>

<defaultCache name="default"

        maxElementsInMemory="300"

        eternal="false"

        timeToIdleSeconds="500"

        timeToLiveSeconds="500"

        overflowToDisk="true"
       
        diskPersistent="false"
       
        diskExpiryThreadIntervalSeconds="110"

        />


    <cache name="org.taha.cache.METHOD_CACHE"

        maxElementsInMemory="300"

        eternal="false"

        timeToIdleSeconds="500"

        timeToLiveSeconds="500"

        overflowToDisk="true"

        />

</ehcache>

 

接下在Spring配置文件中定义Ehcache组件

 

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

  <property name="configLocation">

    <value>classpath:ehcache.xml</value>

  </property>

</bean>

 

<bean id="methodCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">

  <property name="cacheManager">

    <ref local="cacheManager"/>

  </property>

  <property name="cacheName">

    <value>org.taha.cache.METHOD_CACHE</value>

  </property>

</bean>

建立我们自己的方法拦截器MethodCacheInterceptor.

MethodCacheInterceptor实现了org.aopalliance.intercept.MethodInterceptor接口.

import java.io.Serializable;

 

import net.sf.ehcache.Cache;

import net.sf.ehcache.Element;

 

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

import org.springframework.beans.factory.InitializingBean;

 

/**

 * 拦截器,用于缓存方法返回结果.

 *

 * @version $Id: MethodCacheInterceptor.java v 1.0 2004-11-28 14:57:00 Znjq Exp $

 * @author <a href="mailto:znjq1980@etang.com">Znjq </a>

 */

public class MethodCacheInterceptor implements MethodInterceptor,

        InitializingBean {

    private Cache cache;

 

    /**

     * sets cache name to be used

     */

    public void setCache(Cache cache) {

        this.cache = cache;

    }

 

    /*

     * (non-Javadoc)

     *

     * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)

     */

    public Object invoke(MethodInvocation invocation) throws Throwable {

       String targetName = invocation.getThis().getClass().getName();

        String methodName = invocation.getMethod().getName();

        Object[] arguments = invocation.getArguments();

        Object result;

 

        String cacheKey = getCacheKey(targetName, methodName, arguments);

        Element element = cache.get(cacheKey);

        if (element == null) {

            //call target/sub-interceptor

            result = invocation.proceed();

 

            //cache method result

            element = new Element(cacheKey, (Serializable) result);

            cache.put(element);

        }

        return element.getValue();

    }

 

    /**

     * creates cache key: targetName.methodName.argument0.argument1...

     */

    private String getCacheKey(String targetName, String methodName,

            Object[] arguments) {

        StringBuffer sb = new StringBuffer();

        sb.append(targetName).append(".").append(methodName);

        if ((arguments != null) && (arguments.length != 0)) {

            for (int i = 0; i < arguments.length; i++) {

                sb.append(".").append(arguments[i]);

            }

        }

 

        return sb.toString();

    }

 

    /*

     * (non-Javadoc)

     *

     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()

     */

    public void afterPropertiesSet() throws Exception {

        // TODO Auto-generated method stub

 

    }

}

Spring AOP+自定义注解实现缓存 阅读详情

相关推荐

spring AOP实现查询缓存

本代码通过使用spring aop+ehcache的技术,实现了方法级别的查询缓存,主要原理是 方法的完整路径+方法参数值,作为key,放入cache中,下次访问时先判断cache中是否有该key.

spring三级缓存解决aop代理循环依赖图示

二级缓存可以解决没有aop的循环依赖。核心思路是使用二级缓存来提前曝光创建过程中的对象。 使用二级缓存来解决aop循环依赖的问题是:bean对象属性填充的应该是代理对象,而不是源对象。 三级缓存解决aop循环依赖核心思路:打破bean的生命周期,属性赋值时aop提前创建代理对象。

yangfeng20的博客 2709

spring aop 自定义缓存实现

spring aop 自定义缓存实现的一个小实例,地址:http://blog.youkuaiyun.com/maoyeqiu/article/details/50260357

Springboot通过aop实现声明式缓存

【代码】Springboot通过aop实现声明式缓存。

weixin_60223449的博客 587

普冉(PUYA)单片机开发笔记 [完结篇]:使用体会

这一篇是 PY32F003 应用实验的完结篇,总结了对这颗 MCU 的使用体会。我已经把自己实验用的代码打包上传,供各位码神参考。

Tomcat0130 - 代码生涯 9606

uniapp+ucharts折线图toolTip不显示?别慌,手把手教你用showToolTip方法精准修复

本文详细解析了uniapp+ucharts折线图中toolTip不显示的常见问题,提供了showToolTip方法的精准修复方案。从底层原理到实战代码,帮助开发者解决触摸事件冲突、坐标计算偏差等问题,确保折线图交互提示功能稳定运行。

weixin_30316097的博客 403

Spring AOP实现缓存业务

缓存

Dancefff的博客 592

MicroPython ubluetooth 库详细介绍

MicroPython的ubluetooth库为蓝牙通信提供了强大的支持,使得开发者能够在MicroPython环境下轻松实现蓝牙设备之间的通信。其中ubluetooth库为MicroPython提供了强大的蓝牙通信功能,使得开发者能够轻松地在各种支持MicroPython的硬件平台上实现蓝牙设备之间的通信。它提供了一系列的函数和类,用于实现蓝牙设备的扫描、连接、数据传输等功能。- 上述代码中,首先创建了一个蓝牙服务和一个特征,然后可以通过read和write函数读取和写入特征值。# 处理连接成功事件。

m0_46311182的博客 1762

使用SpringAOP+Caffeine+Redis实现本地缓存与多级缓存

*** 本地缓存// 过期时间 默认10分钟 long expired() default 600;// key创建器 String keyGenerator() default "org.springframework.cache.interceptor.KeyGenerator";/*** 本地缓存// 过期时间 默认10分钟 long expired() default 600;

秃了也弱了 1324

IPV6基本配置

IPV6配置,DHCPV6,华为模拟器,IPV6的M/O标志位

路漫漫其修远兮 4666

高通引导文件获取全攻略:ELF/MBN提取与EDL救砖实战

在智能手机底层维护中,引导加载程序(Bootloader)是系统启动的第一道关卡。高通平台通过PBL、SBL1/XBL等阶段完成硬件初始化和安全校验,一旦引导分区损坏,设备便可能陷入黑砖状态。此时,掌握ELF与MBN格式的引导镜像获取方法,成为维修工程师和刷机用户的核心技能。通过官方固件包解包或借助EDL模式直接从设备分区备份,均能获得原厂匹配的引导文件。配合Firehose工具和9008端口通信,即可实现分区级读写与救砖恢复。本文从启动链路原理出发,对比两种获取路径的适用场景,并针对驱动识别、文件校验、分

weixin_30175731的博客 423

零中频接收机设计避坑指南:从IQ信号处理到链路预算,这些细节ADS仿真时千万别忽略

本文深入探讨零中频接收机设计中的关键细节与常见陷阱,涵盖IQ信号处理、链路预算优化及ADS仿真技巧。特别强调功分器选型、90度移相器相位校准、S参数仿真配置等核心问题,帮助工程师规避设计风险,提升射频前端性能。通过实战案例解析,揭示零中频架构在镜像抑制比、直流偏移消除等方面的独特挑战与解决方案。

weixin_33728268的博客 740

Happycapy深度解析:AI智能体的“iPhone时刻“来了?

从理论到实践深度解析了融合OpenClaw和ClaudeCode优点的超强智能体工具Happycapy

program哲学 457

利用Spring AOP 缓存方法结果集

我们都知道Hibernate可以用ehcache来作为Second Level Cache.主要是针对POJO的缓存,而且缓存的读取在Hibernate中是写死.实际运用中感觉很不灵活.今天看到一篇介绍利用Spring Interceptor 来缓存指定方法结果的例子,感觉很不错,充分体会到AOP的强大力量 :)首先配置ehcache.xml  

znjq1001的专栏 1038

Apollo Control——超详细入门教程(六):MPC二次规划问题转化

专栏文章列表 Apollo Control——超详细入门教程(一):基于道路误差的车辆动力学模型 Apollo Control——超详细入门教程(二):连续状态空间方程离散化与离散LQR公式推导 Apollo Control——超详细入门教程(三):基于Frenet坐标系及XY坐标系的多项式轨迹生成 Apollo Control——超详细入门教程(四):控制模块轨迹误差计算 Apollo Control——超详细入门教程(五):油门刹车标定表之双线性插值算法 ...

凉了鸭的博客 2233

ESP32设备驱动-TM1637-驱动4位7段数码管

TM1637是一款带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成了MCU数字接口、数据锁存、LED高压驱动、键盘扫描等功能。 TM1637使用DIP20/SOP20封装,主要适用于电磁炉、微波炉、小家电的显示驱动。

视觉与物联智能 2118

java取出缓存中得结果集,利用Spring AOP 缓存方法结果集

importjava.io.Serializable;importnet.sf.ehcache.Cache;importnet.sf.ehcache.Element;importorg.aopalliance.intercept.MethodInterceptor;importorg.aopalliance.intercept.MethodInvocation;importorg.springfr...

weixin_35700003的博客 241

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

利用Spring AOP 缓存方法结果集(ehcache)

我们都知道Hibernate可以用ehcache来作为Second Level Cache.主要是针对POJO的缓存,而且缓存的读取在Hibernate中是写死.实际运用中感觉很不灵活.今天看到一篇介绍利用Spring Interceptor 来缓存指定方法结果的例子,感觉很不错,充分体会到AOP的强大力量 :)首先配置ehcache.xml

soleghost的专栏 3374

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

利用Spring AOP 缓存方法结果集(下)

invoke方法中,首先根据key查询缓存(key=className + methodName + arguments) ,缓存中存在则返回,否之调用invocation.proceed()返回结果. 在Spring配置文件中定义拦截器 &lt;bean id="methodCacheInterceptor" c...

lihaiyan 365

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java取出缓存中得结果集,月光软件站 - 编程文档 - Java - 利用Spring AOP 缓存方法结果集...

importjava.io.Serializable;importnet.sf.ehcache.Cache;importnet.sf.ehcache.Element;importorg.aopalliance.intercept.MethodInterceptor;importorg.aopalliance.intercept.MethodInvocation;importorg.springfr...

weixin_36168447的博客 138

Spring 缓存 AOP 实现

Spring 缓存 AOP 实现 文章目录Spring 缓存 AOP 实现前言1.项目环境2.Spring @Cacheable 示例3.实现猜想4.实现源码核心API5.Spring AOP API 示例6.源码分析6.1 @EnableCaching6.2 ProxyCachingConfiguration6.2.1 Advisor 实现6.2.2 Pointcut 实现6.2.3 Interceptor 实现6.2.4 CacheOperationSource 实现6.2.5 小结6.3 AutoPr

谢文峰的博客 1171

利用Spring Interceptor 对指定方法实现缓存

我们都知道Hibernate可以用ehcache来作为Second Level Cache.主要是针对POJO的缓存,而且缓存的读取 在Hibernate中是写死.实际运用中感觉很不灵活.今天看到一篇介绍利用Spring Interceptor 来缓存指定 方法结果的例子,感觉很不错,充分体会到AOP的强大力量 :) 首先配置ehcache.xml        

Apple丶Lan 1719

搞定用Spring AOP实现的缓存

        Spring使用术语一个对象的 advisor来表示一个方面,包含一个通知和一个指定特定连接点的切入点。 各种通知类型有MethodInterceptor (来自AOP联盟的拦截器API)和定义在org.springframework.aop包中的 通知接口。所有通知必须实现org.aopalliance.aop.Advice标签接口。 Spring-framework-1.1.2

chikai On The Java Road 3377
上一篇: 关于spring声明式事务管理异常处理的测试和小结
下一篇: 利用Spring AOP 缓存方法结果集(下)
lhycarter
博客等级 码龄14年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值