不废话、、、如下
 
1、自定义注解
 
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)
public @interface ClearCache {
    boolean open() default true;
}
 
2、刪除逻辑
 
@Component
@Aspect
@Slf4j
public class DoubleClearCacheAop {
    @Autowired
    private UserService userService;
	
    ScheduledExecutorService task = new ScheduledThreadPoolExecutor(10, new BasicThreadFactory.
            Builder().namingPattern("clearCache-schedule-pool-%d").build());
    @Pointcut("@annotation(com.inspur.henan.uac.modules.open.util.ClearCache)")
    private void clearCachePoint() {
    }
    @Around("clearCachePoint()")
    public Object clearCacheAop(ProceedingJoinPoint proceeds) throws Throwable {
        Method method = ((MethodSignature) proceeds.getSignature()).getMethod();
        ClearCache annotation = method.getAnnotation(ClearCache.class);
        Object proceed = null;
        
        if (annotation.open()) {
        	
            IPubUser user = MsySecurityContextHolder.getUser();
            if (Objects.nonNull(user)) {
            	
                userService._clearCache(user);
                
                proceed = proceeds.proceed();
                
                task.schedule(() -> {
                    userService._clearCache(user);
                    if (log.isInfoEnabled()) {
                        log.info(Thread.currentThread().getName() + ":double delete cache completed");
                    }
                }, 2L, TimeUnit.SECONDS);
            } else {
                proceed = proceeds.proceed();
            }
        }
        return proceed;
    }
}