通过AOP 实现异常统一管理

简介: package com.zhang.shine.cache; import java.lang.reflect.Method; import org.aspectj.lang.ProceedingJoinPoint; import org.
package com.zhang.shine.cache;

import java.lang.reflect.Method;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class MethodLogAspectJ {

    @Pointcut("@annotation(com.zhang.shine.cache.MethodLog)")
    public void methodCachePointcut() {
    }

    @Around("methodCachePointcut()")
    public Object methodCacheHold(ProceedingJoinPoint joinPoint)
            throws Throwable {
        System.out.println("aop start ");
        String methodRemark = getMthodRemark(joinPoint);
        Object result = null;
        try {
            // 记录操作日志...谁..在什么时间..做了什么事情..
            result = joinPoint.proceed();
        } catch (Exception e) {
            // 异常处理记录日志..log.error(e);
            throw e;
        }

        System.out.print(methodRemark);
        System.out.println("aop end ");
        return result;
    }

    // 获取方法的中文备注____用于记录用户的操作日志描述
    public static String getMthodRemark(ProceedingJoinPoint joinPoint)
            throws Exception {
        String targetName = joinPoint.getTarget().getClass().getName();
        String methodName = joinPoint.getSignature().getName();
        Object[] arguments = joinPoint.getArgs();

        Class targetClass = Class.forName(targetName);
        Method[] method = targetClass.getMethods();
        String methode = "";
        for (Method m : method) {
            if (m.getName().equals(methodName)) {
                Class[] tmpCs = m.getParameterTypes();
                if (tmpCs.length == arguments.length) {
                    MethodLog methodCache = m.getAnnotation(MethodLog.class);
                    methode = methodCache.remark();
                    break;
                }
            }
        }
        return methode;
    }

}
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MethodLog {
    String remark() default "";
}


public class Sev {
    @MethodLog(remark="增加用户信息")
    public String addUser(int type,int parentid){
        return "";
    }
}

 

相关文章
|
10月前
|
XML 缓存 Java
解锁Spring Boot AOP的魔力:优雅地管理交叉关注点
解锁Spring Boot AOP的魔力:优雅地管理交叉关注点
395 0
|
10月前
|
XML Java 数据格式
spring-aop的切入表达式和JoinPoint的使用以及怎么返回通知获取结果和在异常通知中获取异常还有环绕通知
spring-aop的切入表达式和JoinPoint的使用以及怎么返回通知获取结果和在异常通知中获取异常还有环绕通知
232 0
java202304java学习笔记第五十八天员工管理-Aop基础-记录操作日志4
java202304java学习笔记第五十八天员工管理-Aop基础-记录操作日志4
73 0
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-连接点2
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-连接点2
62 0
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-连接点1
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-连接点1
75 0
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-execution之2
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-execution之2
51 0
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-execution之2
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-连接点2
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-连接点2
89 0
java202304java学习笔记第五十七天员工管理-Aop基础-切入点表达式-连接点2
|
Java Spring
spring基于 注解的 AOP 的前后置通知,异常通知,最终通知,环绕通知
spring基于 注解的 AOP 的前后置通知,异常通知,最终通知,环绕通知
|
XML Java 数据格式
spring基于 XML 的 AOP 的前后置通知,异常通知,最终通知
spring基于 XML 的 AOP 的前后置通知,异常通知,最终通知
java202304java学习笔记第五十八天员工管理-Aop基础-记录操作日志4
java202304java学习笔记第五十八天员工管理-Aop基础-记录操作日志4
99 0