Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让Spring @Cacheable工作在AspectJ方面之上?

如何让Spring @Cacheable工作在AspectJ方面之上?
EN

Stack Overflow用户
提问于 2016-08-19 20:54:32
回答 1查看 1.6K关注 0票数 3

我创建了一个在spring应用程序中运行良好的AspectJ方面。现在,我想添加缓存,使用springs可缓存注释。

为了检查@Cacheable是否被选中,我使用了一个不存在的缓存管理器的名称。常规的运行时行为是抛出异常。但在这种情况下,没有抛出异常,这表明@Cacheable注释没有应用于截取对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* { package, some more imports... } */

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.cache.annotation.Cacheable;

@Aspect
public class GetPropertyInterceptor
{
    @Around( "call(* *.getProperty(..))" )
    @Cacheable( cacheManager = "nonExistingCacheManager", value = "thisShouldBlowUp", key = "#nosuchkey" )
    public Object intercepting( ProceedingJoinPoint pjp ) throws Throwable
    {
        Object o;
        /* { modify o } */
        return o;
    }
}

既然我的方面已经在工作了,我怎么才能让@Cacheable工作在它上面呢?

EN

回答 1

Stack Overflow用户

发布于 2016-08-19 22:21:09

您可以通过使用Spring常规依赖注入机制并将org.springframework.cache.CacheManager注入到您的方面中来实现类似的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Autowired
CacheManager cacheManager;

然后,您可以在周围的建议中使用缓存管理器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Around( "call(* *.getProperty(..))" )
public Object intercepting( ProceedingJoinPoint pjp ) throws Throwable
{
    Cache cache = cacheManager.getCache("aopCache");
    String key = "whatEverKeyYouGenerateFromPjp";
    Cache.ValueWrapper valueWrapper = cache.get(key);
    if (valueWrapper == null) {
        Object o;
        /* { modify o } */
        cache.put(key, o); 
        return o;
    }
    else {
        return valueWrapper.get();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39047520

复制
相关文章
如何让一个层位于iframe之上.flash之上
该文介绍了如何设置元素的z-index属性以使一个层位于另一个层之上。首先,介绍了z-index属性的含义,然后给出了一些示例代码。
练小习
2017/12/29
7730
cacheable更新_详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用
@Cacheable 的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
全栈程序员站长
2022/11/16
4.3K0
使用Spring @Cacheable注解
出现这种异常,需要向自定义ObjectMapper,设置一些参数,而不是直接使用Jackson2JsonRedisSerializer类中黙认的ObjectMapper,看源代码可以知道,Jackson2JsonRedisSerializer中的ObjectMapper是直接使用new ObjectMapper()创建的,这样ObjectMapper会将Redis中的字符串反序列化为java.util.LinkedHashMap类型,导致后续Spring对其进行转换成报错。其实我们只要它返回Object类型就可以了。
Qwe7
2022/03/18
1.2K0
Spring AOP VS AspectJ
Spring AOP 使用简单 仅支持对Spring容器管理的Bean的增强,非Spring容器管理的对象(如业务POJO等)无法被拦截 仅支持对方法级别的增强,无法对成员变量、getter&setter等进行增强 动态代理类在运行时生成 无法直接对方法内部调用进行增强 无需引入额外的依赖和插件 AspectJ 使用相对复杂 可以对项目中所有对象进行增强 可以对类的方法、成员变量、getter&setter等都进行增强 动态代理类在编译时生成 可直接对内部调用进行增强 需要引入AspectJ的依赖和编译
张申傲
2020/09/03
1.3K0
如何让BYOE在云中为企业工作
目前,在云中使用用户自己的加密产品已变得更为普遍。专家Ed Moyle在本文中讨论了BYOE的优缺点,以及用户在正式实施前所需了解的内容。 花几分钟时间与大多数技术人员讨论下公共云服务,你很快就会得到一个肯定的结论:从安全性的角度来看,云应用具有较大的挑战性。在一定程度上,这是云本身的固有特性决定的。让云变得有价值和强大的原因之一就是先进技术基础的商品化,这就意味着技术堆栈一定层面以下的一切(具体层面高低因云模式不同而不同)在客户眼中就是一个黑盒。这是非常强大的,因为它意味着客户可以重定向资源,否则它将
静一
2018/03/27
3.1K1
如何让BYOE在云中为企业工作
如何让 Python 脚本在工作日运行?
你好,我是征哥,最近用 Python 写了个每日签到答题的脚本,想让它在工作日每天运行,于是我找到了这个三方库-chinesecalendar。
somenzz
2022/05/24
3.2K0
如何让 Python 脚本在工作日运行?
Spring缓存注解@Cacheable、@CacheEvict、@CachePut
@Cacheable 的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
似水的流年
2020/08/25
2.1K0
Spring-AOP 使用@AspectJ
我们之前一个系列的文章,分别使用Pointcut和Advice接口描述切点和增强,并用Advisor整合二者描述切面,@AspectJ则采用注解来描述切点、增强,二者只是表述方式不同,描述内容的本质是完全相同的。
小小工匠
2021/08/16
5100
硬核 | 使用spring cache让我的接口性能瞬间提升了100倍
笔者之前做商城项目时,做过商城首页的商品分类功能。当时考虑分类是放在商城首页,以后流量大,而且不经常变动,为了提升首页访问速度,我考虑使用缓存。对于java开发而言,首先的缓存当然是redis。
苏三说技术
2020/10/15
2.5K0
硬核 | 使用spring cache让我的接口性能瞬间提升了100倍
硬核 | 使用spring cache让我的接口性能瞬间提升了100倍
笔者之前做商城项目时,做过商城首页的商品分类功能。当时考虑分类是放在商城首页,以后流量大,而且不经常变动,为了提升首页访问速度,我考虑使用缓存。对于java开发而言,首先的缓存当然是redis。
程序员小强
2022/01/18
3660
硬核 | 使用spring cache让我的接口性能瞬间提升了100倍
【Spring实战】—— 13 AspectJ注解切面
前面了解了典型的AOP基于配置的使用方法,下面介绍下如何依赖于注解来实现AOP。 基于注解降低了配置文件的复杂程度,但是引入了程序间的耦合,其中的优劣待用户自己判断了。 需要注意的是,确定AspectJ与JDK之间的版本,否则会报错,详情请见。   首先看一下基于注解的切面类,这时的切面不仅仅是一个POJO类了,与AOP进行了紧密的耦合。但是配置过程和方式都与原来的方式差不多。 package com.spring.test.chap44; import org.aspectj.lang.ann
用户1154259
2018/01/18
8700
Spring AOP,AspectJ,CGLIB 有点晕
在今天之前,我还以为AspectJ 是Spring的一部分,因为我们谈到Spring AOP一般都会提到AspectJ。原来AspectJ是一套独立的面向切面编程的解决方案。下面我们抛开Spring,单纯的看看AspectJ。
芋道源码
2018/11/22
1.6K0
比较Spring AOP与AspectJ
本文翻译自Comparing Spring AOP and AspectJ(http://www.baeldung.com/spring-aop-vs-aspectj) 介绍 如今有多个可用的AOP库,这些组件需要回答一系列的问题: 是否与我现有的应用兼容? 我在哪实现AOP? 集成到我的应用是否很快? 性能开销是多少? 本文中,我们将会着重回答这些问题,并介绍两款Java最流行的AOP框架:Spring AOP 和 AspectJ。 AOP概念 在我们开始之前,让我们对术语和核心概念做一个快速,高水平的回
aoho求索
2018/04/03
1.6K0
比较Spring AOP与AspectJ
归纳AOP在Android开发中的几种常见用法
它是一种关注点分离的技术。我们软件开发时经常提一个词叫做“业务逻辑”或者“业务功能”,我们的代码主要就是实现某种特定的业务逻辑。但是我们往往不能专注于业务逻辑,比如我们写业务逻辑代码的同时,还要写事务管理、缓存、日志等等通用化的功能,而且每个业务功能都要和这些业务功能混在一起,非常非常地痛苦。为了将业务功能的关注点和通用化功能的关注点分离开来,就出现了AOP技术。
fengzhizi715
2018/08/24
9550
归纳AOP在Android开发中的几种常见用法
Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。
用户7353950
2022/05/10
2.4K0
帝国cms在防止内容采集方面做的工作
在某论坛偶然看到有讨论帝国CMS关于防止复制和防止采集方面的内容。于是下载了一份学习一下。
yumusb
2020/08/28
9300
Spring 基于 AspectJ 的 AOP 开发
重点:如果不调用 ProceedingJoinPoint 的 proceed 方法,那么目标方法就被拦截了。
希希里之海
2019/06/24
8330
Spring-AOP @AspectJ语法基础
@AspectJ使用Java5.0注解和正规的AspectJ的切点表达式语言描述切面, 由于Spring只支持方法的连接点,所以Spring仅支持部分AspectJ的切点语言。
小小工匠
2021/08/16
3920
Spring详解(六)------AspectJ 实现AOP
IT可乐
2018/01/04
1.8K0
Spring详解(六)------AspectJ 实现AOP
点击加载更多

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文