`
songshidong
  • 浏览: 21509 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring Aop 实现日志记录

 
阅读更多

最近一段时间做项目总是用到AOP,在此做个简单的Spring Aop  日志记录Demo

简单的回顾一下Aop,他的代理方式有两种:

第一种:.静态代理(也就是编译时进行代理,如AspectJ)。

第二种:动态代理(动态又分为两种代理方式1.JDK动态代理 2.CGLIB动态代理,至于区别就不多说了)。

想要实现多个方法用同一个切面增强,怎么区别方法的模块名字和描述呢?当然方式很多,我这里用自定义

注解来实现:

第一步编写自定义注解:

---------自定义注解参数解释:

  1. /** 
  2.  * 表示对标记有xxx注解的类,做代理 注解@Retention可以用来修饰注解,是注解的注解,称为元注解。 
  3.  * Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型, 
  4.  * 这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 
  5.  * RententionPolicy使用。RetentionPolicy有3个值:CLASS RUNTIME SOURCE 
  6.  * 用@Retention(RetentionPolicy 
  7.  * .CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候; 
  8.  * 用@Retention(RetentionPolicy.SOURCE 
  9.  * )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中; 
  10.  * 用@Retention(RetentionPolicy.RUNTIME 
  11.  * )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时, 
  12.  * 所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 
  13.  * 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用. 
  14.  *  
  15.  * 类和方法的annotation缺省情况下是不出现在javadoc中的,为了加入这个性质我们用@Documented 
  16.  *  java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类。 
  17.  *  @interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interface关键字  
Java代码  收藏代码
  1. @Target({ElementType. METHOD})  
  2. @Retention(RetentionPolicy.RUNTIME )  
  3. @Documented  
  4. public @interface MethodRecordLog {  
  5.         
  6.       String moduleName(); //模块名称  
  7.       String logType(); //日志类别  
  8.       String desc() default "描述信息" ;// 模块描述
  9. }  

 

第二步编写日志记录类(也就是增强类)

Java代码  收藏代码
  1.     @Aspect  
  2.     @Component  
  3.     public class LogAspect {  
  4.        
  5.      @Autowired  
  6.      private LogService LogService;  
  7.        
  8.      //此注解是后置增强,方法执行成功后会执行  
  9.    @AfterReturning("within(com.xxx.*.web..*) && @annotation(mrl)")   
  10.    public void insertLogSuccess(final ProceedingJoinPoint pjp, final MethodRecordLog mrl){   
  11.      String moduleName = mrl.moduleName() ;  
  12.      String methodName = jp.getSignature().getName(); //获取目标方法名  
  13.         
  14.        XXLog xxLog = new XXLog(); 
  15.             xxLog.setXX(XX);//这里设置属性就不多写了
  16.             LogService.saveLog(xxLog);//调用方法持久DB
  17.    }   
  18.   
  19.    //该方法体为异常通知,当目标方法出现异常时,执行该方法体   
  20.    @AfterThrowing(pointcut= "within(com.xxx.*.web..*) && @annotation(mrl)", throwing="ex")   
  21.    public void insertLog(final ProceedingJoinPoint pjp, final MethodRecordLog mrl, CRUDException ex){   
  22.      String moduleName = mrl.moduleName() ;  
  23.      String methodName = jp.getSignature().getName(); //获取目标方法名  
  24.         
  25.        XXLog xxLog = new XXLog(); 
  26.             xxLog.setXX(XX);//这里设置属性就不多写了
  27.             LogService.saveLog(xxLog);//调用方法持久DB
  28.    }  
  29.     
  30. //ProceedingJoinPoint继承自JoinPoint,在 JoinPoint的基础上添加了反射、具体参照javadoc
    
注:@AfterReturning为注解方法体成功执行后,执行的方法。@AfterThrowing为注解方法体抛出CRUDException 异常时执行的方法。ProceedingJoinPoint pjp参数可以获得注解方法体的相关值,包括类名、方法名、参数等信息。MethodRecordLog mrl参数为自定义注解的类,可以获得自定义注解的值

第三步在spring 的配置文件里面启动注解:

Java代码  收藏代码
  1. <!-- 启用@AspectJ支持 -->  
  2.        <aop:aspectj-autoproxy />  

 

第四步是controller层面自定义注解的用法:

Java代码  
  1.       @JpfLog(moduleName="用户",logType="",desc= "添加用户")  
  2.       @RequestMapping(value = "/saveByUser")  
  3.       public String saveByUser(User user) throws CRUDException {  
  4.              int result = userService.saveUser(user);  
  5.              return "";  
  6.       }  
分享到:
评论

相关推荐

    JAVA 中Spring aop 实现日志记载

    在Java开发中,Spring AOP(面向切面编程)是一个强大的功能,用于实现日志记录。AOP允许我们在不修改原有代码的情况下,插入新的行为,比如日志记录,事务管理等。下面将详细介绍如何在Spring框架中使用AOP来实现...

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...

    spring aop 操作日志

    本资源用来展示如何使用 spring aop 进行日志记录,例子里面通过aop的配置,把产生的日志存放到当前项目的根目录下,而且对方法执行过程中的参数进行了记录,对于aop如何记录日志不清楚的同学可以看看。

    spring aop实现日志功能

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

    Spring AOP实现机制

    - **日志记录**:在方法调用前后记录操作信息。 - **事务管理**:自动进行事务的开启、提交、回滚等操作。 - **权限控制**:在访问敏感资源前进行权限检查。 - **性能监控**:记录方法执行时间,分析系统性能瓶颈。 ...

    spring aop实现接口参数变更前后对比和日志记录

    spring aop实现接口参数变更前后对比和日志记录完整代码,拿到项目代码,只需要做数据库连接的修改即可运行起来使用,代码案例详细,真是可靠,代码原文地址:...

    spring aop实现日志分析管理

    3. `Main`类:启动应用,调用`Service`类的方法以触发AOP日志记录。 4. `pom.xml`:Maven配置文件,引入了Spring AOP和日志框架的依赖。 5. `application.properties`或`application.yml`:配置文件,可能包含日志...

    spring aop实现日志功能 开发技术-其它

    总结来说,Spring AOP提供了一种简洁且灵活的方式来实现日志功能,使得开发者可以专注于业务逻辑,而不是重复的日志记录代码。通过定义切面和通知,我们可以将日志操作与业务代码解耦,提升代码的可复用性和可扩展性...

    Spring AOP

    以下是一个简单的例子,展示如何使用Spring AOP实现日志记录: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore...

    spring AOP 切面日志 分层打日志

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

    spring aop jar 包

    1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知(Advice)**:通知是在特定连接点(Join Point)...

    spring aop 切面添加日志

    通过这个项目,我们可以学习到如何在Spring AOP中实现日志记录,这不仅可以帮助我们调试和监控应用程序,还可以为未来的维护提供宝贵的线索。同时,这也是理解和实践面向切面编程的一个很好的起点。

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    为了在不改变原代码的情况下增加日志记录功能,我们创建了一个名为HelloProxy的代理类,该代理类也实现了IHello接口。代理类中的sayHello()方法会在调用原Hello类的sayHello()方法之前和之后分别调用Logger类进行...

    Spring AOP实现

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件...通过理解advice、pointcut和advisor这三个核心概念,开发者可以更有效地利用Spring AOP实现日志记录、事务管理等各种功能,提高代码的可维护性和可扩展性。

    Flex整合Spring实现aop日志管理

    AOP允许我们在不修改原有业务逻辑的情况下,插入日志记录代码,使得日志功能的实现更加灵活和高效。 首先,让我们理解Flex和Spring这两个技术。Flex是一种基于Adobe Flash Player或Adobe AIR的开放源代码框架,用于...

    Spring AOP的简单实现

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

    swagger和spring Aop日志结合

    另一方面,Spring AOP(面向切面编程)则是Spring框架的一个核心特性,用于实现跨切面的关注点,如日志记录。本篇文章将深入探讨如何将Swagger与Spring AOP结合起来,以实现优雅的日志记录功能。 首先,让我们了解...

    spring aop切面拦截指定类和方法实现流程日志跟踪

    本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...

Global site tag (gtag.js) - Google Analytics