package com.qconsp.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; import com.google.gson.Gson; import com.google.gson.GsonBuilder; //@Aspect //@EnableAspectJAutoProxy //@Component public class RedisAspect { private Jedis jedis; private Gson gson; public RedisAspect() { jedis = new Jedis("127.0.0.1", 1200); gson = new GsonBuilder().create(); } @Around("execution(* com.qconsp..*.*find(..))") private Object around(final ProceedingJoinPoint pjp) throws Throwable { String json = jedis.get(pjp.getArgs()[0].toString()); if (json != null) { Class type = ((MethodSignature) pjp.getSignature()).getReturnType(); Object object = gson.fromJson(json, type); if (object != null) { System.out.println("$$$ Recuperado pelo REDIS!"); return object; } } Object proceed = pjp.proceed(); System.out.println("$$$ Recuperado pelo BANCO!: "); jedis.set(pjp.getArgs()[0].toString(), gson.toJson(proceed)); return proceed; } }