标题很清楚了,不说了
package com.raymon.hcp.security.aspect; import com.raymon.hcp.security.annotation.CacheException; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.lang.reflect.Method; /** * Redis缓存切面,防止Redis宕机影响正常业务逻辑 * Created by zhanglei on 2020/3/17. */ @Aspect @Component @Order(2) public class RedisCacheAspect { private static Logger LOGGER = LoggerFactory.getLogger(RedisCacheAspect.class); @Pointcut("execution(public * com.raymon.hcp.portal.service.*CacheService.*(..)) || execution(public * com.raymon.hcp.service.*CacheService.*(..))") public void cacheAspect() { } @Around("cacheAspect()") public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Method method = methodSignature.getMethod(); Object result = null; try { result = joinPoint.proceed(); } catch (Throwable throwable) { //有CacheException注解的方法需要抛出异常 if (method.isAnnotationPresent(CacheException.class)) { throw throwable; } else { LOGGER.error(throwable.getMessage()); } } return result; } }