Java tutorial
/** * Copyright (c) 2009-2015 http://demi-panda.com * * Licensed */ package com.ace.erp.extra.aop; import com.ace.erp.common.cache.BaseCacheAspect; import com.ace.erp.entity.sys.User; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /** * Created with ace. * User: denghp * Date: 10/20/13 * Time: 7:14 PM */ @Component @Aspect public class ResourceMenuCacheAspect extends BaseCacheAspect { public ResourceMenuCacheAspect() { setCacheName("sys-menuCache"); } private String menusKeyPrefix = "menus-"; @Pointcut(value = "target(com.ace.erp.service.sys.ResourceService)") private void resourceServicePointcut() { } @Pointcut(value = "execution(* save(..)) || execution(* update(..)) || execution(* delete(..))") private void resourceCacheEvictAllPointcut() { } @Pointcut(value = "execution(* findMenus(*)) && args(arg)", argNames = "arg") private void resourceCacheablePointcut(User arg) { } @Before(value = "resourceServicePointcut() && resourceCacheEvictAllPointcut()") public void findRolesCacheableAdvice() throws Throwable { clear(); } //TODO: ??cache //@Around(value = "resourceServicePointcut() && resourceCacheablePointcut(arg)", argNames = "pjp,arg") public Object findRolesCacheableAdvice(ProceedingJoinPoint pjp, User arg) throws Throwable { User user = arg; String key = menusKey(user.getId()); Object retVal = get(key); if (retVal != null) { log.debug("cacheName:{}, method:findRolesCacheableAdvice, hit key:{}", cacheName, key); return retVal; } log.debug("cacheName:{}, method:findRolesCacheableAdvice, miss key:{}", cacheName, key); retVal = pjp.proceed(); put(key, retVal); return retVal; } public void evict(Integer userId) { evict(menusKey(userId)); } private String menusKey(Integer userId) { return this.menusKeyPrefix + userId; } }