`

利用spring AOP 做方法执行时间的日志log输出

阅读更多
spring配置文件中:
	<!-- 日志时间打印 -->
	<aop:config>  
        <!-- Spring 2.0 可以用 AspectJ 的语法定义 Pointcut,这里拦截 service 包中的所有方法 -->  
        <aop:advisor id="methodTimeLog" advice-ref="methodTimeAdvice" pointcut="execution(* *..service..*(..))"/>  
    </aop:config>  
  
    <bean id="methodTimeAdvice" class="com.ambow.log.MethodTimeAdvice"/>  


MethodTimeAdvice拦截器:
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.StopWatch;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;



public class MethodTimeAdvice implements MethodInterceptor {
	protected final Log log = LogFactory.getLog(MethodTimeAdvice.class);   
	  
    /**  
     * 拦截要执行的目标方法  
     */  
    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();   
        }   
           
        log.info("Takes:" + clock.getTime() + " ms ["  
                + invocation.getThis().getClass().getName() + "."  
                + invocation.getMethod().getName() + "("+StringUtils.join(simpleParams,",")+")] ");   
        return result;   
    }   


}

分享到:
评论

相关推荐

    Spring Aop+Log4j 动态日志

    结合Spring AOP和Log4j,我们可以在不改变业务代码的情况下,实现对方法执行的动态日志跟踪。首先,我们需要创建一个切面类,这个类会包含一个或多个通知方法,这些方法将在匹配的连接点被调用。通知方法通常用于...

    spring aop 切面添加日志

    本项目旨在演示如何在Spring AOP中添加日志功能,以实现对应用程序执行过程的透明跟踪。通过使用Java 1.8,我们可以利用其新特性,如Lambda表达式,来简化代码。 首先,让我们理解Spring AOP的基本概念。AOP是面向...

    spring AOP 切面日志 分层打日志

    在这里,我们重点关注如何利用Spring AOP实现分层日志记录。 **一、Spring AOP基本概念** 1. **切面(Aspect)**: 切面是封装了横切关注点的模块,例如日志记录就是一个横切关注点,它横跨多个对象和类。 2. **通知...

    spring aop实现日志功能

    在IT行业中,Spring框架是Java开发中的一个基石,尤其在企业级应用开发中扮演着重要角色。Spring AOP(Aspect ...通过运行这些测试,我们可以看到AOP日志功能的实际效果,并学习如何在自己的项目中应用这些概念。

    简单spring aop 例子

    4. **测试**:在测试类中,创建Spring容器并调用`UserService`的方法,你会看到日志信息先于方法执行输出。 以上就是Spring AOP的基本用法。在实际项目中,你可以根据需求定义不同的通知类型,如`@After`、`@Around...

    JAVA 中Spring aop 实现日志记载

    在实际开发中,Spring AOP的日志记载不仅限于打印方法名和返回值,还可以记录参数、执行时间、异常信息等,帮助开发者更好地监控和调试系统。 综上所述,Spring AOP提供了一种优雅的方式,让我们能够轻松地在不...

    spring aop日志拦截

    下面我们将深入探讨如何利用Spring AOP来实现controller层的日志拦截。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知(Advice)和切点(Pointcut)。通知是在特定时间点(切点)执行...

    Spring Mvc AOP通过注解方式拦截controller等实现日志管理

    Spring MVC AOP日志管理通常与日志框架(如Log4j、Logback或Java内置的java.util.logging)集成。以下以Log4j为例: 1. 引入依赖:在项目pom.xml中添加Log4j的依赖。 2. 配置Log4j:创建log4j.properties或log4j....

    Spring之AOP在鉴权和日志记录中的应用

    本篇将深入探讨如何利用Spring AOP来实现鉴权和日志记录。 **二、AOP基础知识** 1. **切面(Aspect)**:AOP的核心概念,它封装了关注点,如日志记录或权限验证。一个切面通常包含一个或多个通知(advice)。 2. ...

    Spring  AOP实现方法大全

    【Spring AOP实现方法大全】 在Spring框架中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们在不修改业务代码的情况下,插入额外的功能,比如日志记录、事务管理等。在...

    Spring Aop四个依赖的Jar包

    在Spring AOP中,我们无需深入到每个方法的实现细节,而是可以定义“切面”,在合适的时机(如方法调用前、后、异常发生时等)执行特定的逻辑。这样,业务代码和关注点(如日志、事务管理等)得以分离,提高了代码的...

    spring aop的demo

    在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...

    springAop与spring定时器

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...

    Spring AOP面向方面编程原理:AOP概念

    Spring AOP是在运行时完成的织入过程,即在程序运行时动态地添加通知。 #### 三、Spring AOP的特点与优势 1. **非侵入性**:Spring AOP的设计理念是非侵入性的,这意味着开发人员无需修改现有代码就可以添加新的...

    spring aop实例annotation方法实现

    Spring AOP是Spring框架的一部分,它提供了一种在运行时织入横切关注点(如日志、事务管理等)到目标对象的能力。AOP的核心概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、切入点(Pointcut)和织...

    spring aop demo 两种实现方式

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,对应用程序的特定部分(如方法调用)进行拦截和处理。这为日志、事务管理、性能监控等提供了方便。本示例提供了一种...

    Spring AOP的简单实现

    在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...

    Spring aop 记录操作日志 Aspect 源码

    总之,Spring AOP提供了一种优雅的方式来实现记录操作日志的需求,通过自定义Aspect和注解,我们可以灵活地控制哪些方法需要记录日志,以及记录什么样的日志信息。这个过程既提高了代码的可维护性,也使得日志管理...

Global site tag (gtag.js) - Google Analytics