spring aop环绕通知记录应用的日志

使用的框架是spring mvc+spring

最近想利用spring aop的环绕通知来处理web的日志问题,总的来讲,如果在controller层做切入,则难监控实际运行情况,在service层做切入,则只能监控到service层的情况,通过捕捉service抛出的异常来记录日志,对于目前本人应用而言,已经足够了,先将记录如下:

代码:

@Component
@Aspect
public class ExceptionLog {

    /**
     * 61      * 环绕通知需要携带ProceedingJoinPoint类型的参数
     * 62      * 环绕通知类似于动态代理的全过程:ProceedingJoinPoint类型的参数可以决定是否执行目标方法。
     * 63      * 而且环绕通知必须有返回值,返回值即为目标方法的返回值
     * 64
     */
    @Around("execution(* *com.test.service..*.*(..))")
    public Object aroundMethod(ProceedingJoinPoint pjd) throws Throwable {
        Object result = null;
        String methodName = "class:" + pjd.getTarget().getClass().getName() + " method:" + pjd.getSignature().getName(); //获取方法名称

        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); //获取请求的URL//执行目标方法
        try {
            //前置通知
            result = pjd.proceed();//返回通知
        } catch (Throwable e) {
            //异常通知
//            System.out.println("The method " + methodName + " occurs expection : " + e);throw e;  /让spring处理异常
        }finally {
           //记录日志

        }
        return result;  //必须返回结果,否则controller无法获取service返回的结果(正常情况下)
    }
}

spring 配置:

 <aop:aspectj-autoproxy/>

web.xml配置(主要是用于获取方便程序获取HttpServletRequest)

 <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>
时间: 2024-10-17 12:20:34

spring aop环绕通知记录应用的日志的相关文章

Spring AOP 之 通知、连接点、切点、切面。

1:知识背景 软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点.而为直切关注点提供服务的,就是横切关注点. 2:面向切面的基本原理 什么是面向切面编程 横切关注点:影响应用多处的功能(安全.事务.日志) 切面: 横切关注点被模块化为特殊的类,这些类称为切面 优点: 每个关注点现在都集中于一处,而不是分散到多处代码中 服务模块更简洁,服务模块只需关注核心代码. AOP 术语 通知: 定义:切面也需要完成工作.在 AOP 术语中,切面的工作被称为通知. 工作内容:通知定义了

【Spring实战】—— 9 AOP环绕通知

假如有这么一个场景,需要统计某个方法执行的时间,如何做呢? 典型的会想到在方法执行前记录时间,方法执行后再次记录,得出运行的时间. 如果采用Spring的AOP,仅仅使用前置和后置方法是无法做到的,因为他们无法共享变量.这样通过环绕通知,就可以快捷的实现. 首先在切面通知类中声明环绕通知类: public void watchPerformance(ProceedingJoinPoint joinpoint){ try{ System.out.println("begin!"); lo

Spring AOP前置通知和后置通知

Spring AOP AspectJ:Java社区里最完整最流行的AOP框架 在Spring2.0以上的版本中,可以使用基于AspectJ注解或基于XML配置的AOP 在Spring中启用AspectJ注解支持 要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar.aspectj.weaver.jar和spring-aspects.jar 将aop Schema添加到<beans>根元素中. 要在Spring IOC容器

Spring AOP前置通知实例说明AOP相关概念

今天又看了下韩顺平的SpringAOP的讲解,讲解的很透彻.仿照视频自己使用下前置通知. 一.引出问题 有个接口TestServiceInter,有两个实现方法TestService和Test2Service.他们都有sayHello():我们的需求是在调用这两个方法之前,要先完成写日志的功能: 二.菜鸟的想法 我在各个实现类的sayHello()方法里面写上写日志的功能就是了. 这样实现存在的问题:代码冗余.当所有实现类都要加上日志功能的时候,需要写很多重复代码 三.利用AOP前置通知实现此功

Spring AOP前置通知实例讲解与AOP详细解析

一.引出问题 有个接口TestServiceInter,有两个实现方法TestService和Test2Service.他们都有sayHello():我们的需求是在调用这两个方法之前,要先完成写日志的功能:二.菜鸟的想法 我在各个实现类的sayHello()方法里面写上写日志的功能就是了. 这样实现存在的问题:代码冗余.当所有实现类都要加上日志功能的时候,需要写很多重复代码三.利用AOP前置通知实现此功能3.1 第一步:我们需要定义一个接口 package com.jdc.aop; /** @a

Spring的环绕通知

首先加入jar包: com.springsource.net.sf.cglib -2.2.0.jar com.springsource.org.aopalliance-1.0.0 .jar com.springsource.org.aspectj.weaver-1.6.8 .RELEASE.jar commons-logging-1.1.3. jar spring-aop-4.0.0.RELEASE.jar spring-aspects-4.0.0.RELEASE.jar spring-bean

spring AOP和通知

1.  spring的通知 1.1.  AOP的概念 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是J2EE应用中一个关于横切关注点的很好的例子.在Spring AOP中,切面可以使用基于模式或者基于注解的方式来实现. 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候.在Spring AOP中,一个连接点总是表示一个方法的执行. 通知(Advice):在切面的某个特定的连接点上执行的动作.其中包括了"aroun

Spring——AOP(通知)

1. 搭建项目环境 2. 新建lib文件夹,添加spring依赖jar包: spring-beans.jar.spring-context.jar.spring-core.jar.spring-expression.jar.[spring-aop.jar] 添加依赖包: commons-logging.jar.[aopalliance.jar] 3. 在项目src目录下新建applicationContext.xml <beans xmlns="http://www.springframe

Spring aop 前置通知

一.首先在项目中加入aop所需要的jar aopalliance-1.0.jaraspectjweaver-1.6.11.jarcommons-logging-1.1.1.jarspring-aop-3.0.5.RELEASE.jarspring-aspects-3.0.5.RELEASE.jarspring-beans-3.0.5.RELEASE.jarspring-context-3.0.5.RELEASE.jarspring-context-support-3.0.5.RELEASE.ja