Spring AOP实现日志记录(Aspect)

版权声明:转载请注明作者:sust_ly https://blog.csdn.net/pycharm_u/article/details/84820301

一、Aop术语

切面(Aspect):在Spring AOP中,切面可以使用通用类或者在普通类中以@Aspect 注解(@AspectJ风格)来实现
连接点(Joinpoint):在Spring AOP中一个连接点代表一个方法的执行
通知(Advice):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括"around"、"before”和"after"等通知。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链
切入点(Pointcut):定义出一个或一组方法,当执行这些方法时可产生通知,Spring缺省使用AspectJ切入点语法。

二、创建LoggerAspect类

@Aspect
public class loggerAspect {

    private Logger log = LoggerFactory.getLogger(this.getClass());

    @Pointcut(value = "execution(* com.ly.dao.daoImpl.SysDaoImpl.*(..))")
    public void pointCut() {
    }


    @AfterReturning(pointcut = "pointCut()", argNames = "joinPoint, retVal", returning = "retVal")
     public void afterReturn(JoinPoint joinPoint, Object retVal) {
        String className = joinPoint.getSignature().getName();
        className = className.substring(className.lastIndexOf(".") + 1);
        className = getMethodChineseName(className);
        //日志记录连接点方法签名
        log.info(className+":"+joinPoint.getSignature().toString());
        //判断参数
        if (null == joinPoint.getArgs()) {
            log.info("没有参数!");
            return;
        }

        StringBuilder rs = new StringBuilder();
        for (Object arg : joinPoint.getArgs()) {
            if (arg instanceof Object[]){
                rs.append(Arrays.toString(((Object[]) arg))).append(", ");
            }else {
                rs.append(arg.toString()).append(", ");
            }
        }
        String s = rs.toString().substring(0, rs.toString().length() - 2);

        log.info("参数:[{}]", s);

    }


    /**
     * 判断操作的中文名
     *
     * @param methodName
     * @return
     */
    public String getMethodChineseName(String methodName) {
        if (methodName.endsWith("find")) {
            return "查找数据";
        }else {
            return "";
        }
    }

}

三、配置AOP

在applicationContext.xml加上aop配置

   <aop:aspectj-autoproxy proxy-target-class="true" />
    <bean id="loggerAspect" class="com.ly.aspect.loggerAspect" />

四、结果

日志记录如下: 

猜你喜欢

转载自blog.csdn.net/pycharm_u/article/details/84820301