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中添加日志功能,以实现对应用程序执行过程的透明跟踪。通过使用Java 1.8,我们可以利用其新特性,如Lambda表达式,来简化代码。 首先,让我们理解Spring AOP的基本概念。AOP是面向...
在这里,我们重点关注如何利用Spring AOP实现分层日志记录。 **一、Spring AOP基本概念** 1. **切面(Aspect)**: 切面是封装了横切关注点的模块,例如日志记录就是一个横切关注点,它横跨多个对象和类。 2. **通知...
在IT行业中,Spring框架是Java开发中的一个基石,尤其在企业级应用开发中扮演着重要角色。Spring AOP(Aspect ...通过运行这些测试,我们可以看到AOP日志功能的实际效果,并学习如何在自己的项目中应用这些概念。
4. **测试**:在测试类中,创建Spring容器并调用`UserService`的方法,你会看到日志信息先于方法执行输出。 以上就是Spring AOP的基本用法。在实际项目中,你可以根据需求定义不同的通知类型,如`@After`、`@Around...
在实际开发中,Spring AOP的日志记载不仅限于打印方法名和返回值,还可以记录参数、执行时间、异常信息等,帮助开发者更好地监控和调试系统。 综上所述,Spring AOP提供了一种优雅的方式,让我们能够轻松地在不...
下面我们将深入探讨如何利用Spring AOP来实现controller层的日志拦截。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知(Advice)和切点(Pointcut)。通知是在特定时间点(切点)执行...
Spring MVC AOP日志管理通常与日志框架(如Log4j、Logback或Java内置的java.util.logging)集成。以下以Log4j为例: 1. 引入依赖:在项目pom.xml中添加Log4j的依赖。 2. 配置Log4j:创建log4j.properties或log4j....
本篇将深入探讨如何利用Spring AOP来实现鉴权和日志记录。 **二、AOP基础知识** 1. **切面(Aspect)**:AOP的核心概念,它封装了关注点,如日志记录或权限验证。一个切面通常包含一个或多个通知(advice)。 2. ...
【Spring AOP实现方法大全】 在Spring框架中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们在不修改业务代码的情况下,插入额外的功能,比如日志记录、事务管理等。在...
在Spring AOP中,我们无需深入到每个方法的实现细节,而是可以定义“切面”,在合适的时机(如方法调用前、后、异常发生时等)执行特定的逻辑。这样,业务代码和关注点(如日志、事务管理等)得以分离,提高了代码的...
在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...
Spring AOP是在运行时完成的织入过程,即在程序运行时动态地添加通知。 #### 三、Spring AOP的特点与优势 1. **非侵入性**:Spring AOP的设计理念是非侵入性的,这意味着开发人员无需修改现有代码就可以添加新的...
Spring AOP是Spring框架的一部分,它提供了一种在运行时织入横切关注点(如日志、事务管理等)到目标对象的能力。AOP的核心概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、切入点(Pointcut)和织...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,对应用程序的特定部分(如方法调用)进行拦截和处理。这为日志、事务管理、性能监控等提供了方便。本示例提供了一种...
在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...
总之,Spring AOP提供了一种优雅的方式来实现记录操作日志的需求,通过自定义Aspect和注解,我们可以灵活地控制哪些方法需要记录日志,以及记录什么样的日志信息。这个过程既提高了代码的可维护性,也使得日志管理...