Spring AOP 实现方法日志记录以及执行时间打印

注意:proxy-target-class="true" 这是决定是走jdk代理还是spring cglib代理的。高版本的(貌似)可以忽略。

 1.在spring 相关配置文件中假如如下配置: 

  <!-- 日志时间打印 -->  
   <aop:config proxy-target-class="true">    
       <!-- 这里拦截 service 包中的所有方法 -->    
       <aop:advisor id="methodTimeLog" advice-ref="methodTimeAdvice" pointcut="execution(* *..service..*(..))"/>    
   </aop:config>    
   
   <bean id="methodTimeAdvice" class="com.ra.fire.utils.MethodTimeAdvice">
   </bean>

2.实现spring aopalliance-1.0.jar 包中的的 MethodInterceptor 接口,实现类如下:

package com.ra.fire.utils;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.StopWatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MethodTimeAdvice implements MethodInterceptor {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
      
    /**  
     * 拦截要执行的目标方法  
     */  
    public Object invoke(MethodInvocation invocation) throws Throwable {   
        //用 commons-lang 提供的 StopWatch 计时,Spring 也提供了一个 StopWatch   
        StopWatch clock = new StopWatch();   
        clock.start(); //计时开始   
        Object result = invocation.proceed();   
        clock.stop();  //计时结束   
           
        //方法参数类型,转换成简单类型   
        Class[] params = invocation.getMethod().getParameterTypes();   
        String[] simpleParams = new String[params.length];   
        for (int i = 0; i < params.length; i++) {   
            simpleParams[i] = params[i].getSimpleName();   
        }   
           
        if(clock.getTime()>=200){
            logger.info("====Methods execute time:" + clock.getTime() + " ms ["  
                    + invocation.getThis().getClass().getName() + "."  
                    + invocation.getMethod().getName() + "("+StringUtils.join(simpleParams,",")+")] ");  
        }
        return result;   
    }   


}
 

 

 

转载于:https://my.oschina.net/huangguangsheng/blog/3002227

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值