使用aop,对方法入参和对应的出参做缓存功能

动态 未结 0 153
小小草
小小草 LV1 2023年9月23日 23:40 发表
使用AOP实现方法入参和对应的出参缓存功能,可以通过在方法执行前后分别进行拦截并缓存参数和返回值来实现。具体实现步骤如下: 1. 定义一个缓存类`Cache`,用于存储方法参数和对应的返回值。 ```java public class Cache { private Map cacheMap = new HashMap<>(); public void put(String key, Object value) { cacheMap.put(key, value); } public Object get(String key) { return cacheMap.get(key); } } ``` 2. 定义一个切面类`CacheAspect`,用于实现缓存功能。 ```java @Aspect @Component public class CacheAspect { private Cache cache = new Cache(); @Around("@annotation(com.example.demo.Cacheable)") public Object cache(ProceedingJoinPoint joinPoint) throws Throwable { // 获取方法名和参数列表 String methodName = joinPoint.getSignature().getName(); Object[] args = joinPoint.getArgs(); // 生成缓存key String key = methodName + Arrays.toString(args); // 判断缓存中是否存在该key Object result = cache.get(key); if (result != null) { System.out.println("从缓存中获取数据:" + result); return result; } // 执行目标方法,并缓存结果 result = joinPoint.proceed(); cache.put(key, result); System.out.println("将数据放入缓存:" + result); return result; } } ``` 在上述代码中,我们使用了`@Around`注解来定义一个环绕通知,该通知会拦截所有被`@Cacheable`注解修饰的方法。在通知中,我们首先获取方法名和参数列表,并根据它们生成一个缓存key。然后判断缓存中是否存在该key,如果存在则直接返回缓存结果,否则执行目标方法并将结果缓存起来。 3. 在需要使用缓存功能的方法上添加`@
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复