`
wmc81610
  • 浏览: 5547 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring AOP记录日志

阅读更多
Spring AOP相关概念,比如切面(Aspect)、增强(也要叫“通知”的,Advice)、切入点(Pointcut)、连接点(JoinPoint)、目标对象(Target)等这里不做介绍。直接上Demo,讲述如何在项目中应用AOP记录日志。
一、先给出相关类:
1.切面类(Aspect):采用annotation注解方式
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class SecurityAspect {
   @Pointcut("execution(* com.aop.DemoImpl.add*(..)) || execution(* del*(..))")
   private void allAddMethod() {
   };

    @Before("allAddMethod()")
    private void checkSecurity() {
       System.out.println("-----开始检查安全了!-----");
    }

    @AfterReturning("allAddMethod()")
       private void addLog(JoinPoint point){
       System.out.println(point.getTarget().getClass().toString());
       Object objArgsObject = point.getArgs()[0];
       System.out.println(objArgsObject.toString());
       System.out.println("------开始记录日志了!------");
    }
}
注意粗体部分,获得代理目标方法参数的方法。在第二部分详细说明。
2.业务类
接口:
public interface IDemo{
    public void addUser(String username, String password); 
    public void deleteUser(int id);
    public void modifyUser(int id, String username, String password); 
    public String findUserById(int id);
}

实现:
public class DemoImpl implements IDemo{
   public void addUser(String username, String password) {
// TODO Auto-generated method stub
System.out.println("##增加了一个用户!##");
    }

   public void deleteUser(int id) {
// TODO Auto-generated method stub
System.out.println("##删除了标志为id的用户##");
    }

   public String findUserById(int id) {
// TODO Auto-generated method stub
System.out.println("##查询用户##");
return null;
   }

   public void modifyUser(int id, String username, String password) {
// TODO Auto-generated method stub
System.out.println("##修改用户##");
   }
}
二、相关说明即配置
1.applicationContext.xml文件:
<!-- Spring AOP相关配置开始 -->
<aop:aspectj-autoproxy /><!-- 支持 @AspectJ 标记-->
<bean id="securityaspect" class="com.aop.SecurityAspect" />
<bean id="demo" class="com.aop.DemoImpl" />
注意引入相关头,可对照下面配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-autowire="byName" default-lazy-init="true">
2.测试代码:
public class Client {
  public static void main(String[] args) {
  BeanFactory factory = new ClassPathXmlApplicationContext(
     "applicationContext.xml");
  IDemo demo= (IDemo) factory.getBean("demo");
  demo.addUser("刘德华", "123");
  demo.deleteUser(1);
  demo.modifyUser(1, "刘德华", "password");
  }
}
运行结果大致如下:
-----开始检查安全了!-----
##增加了一个用户!##
------开始记录日志了!------
-----开始检查安全了!-----
##删除了标志为id的用户##
------开始记录日志了!------
1  
"##修改用户##"


注:其中打印的1为代理的目标方法的第一个参数,切面类中可以获得deleteUser,modifyUser所有的参数。获取连接点方法主要是利用JoinPoint中的getArgs方法,其中还有其它方法可自行研究。
 

分享到:
评论
1 楼 squall140 2012-05-03  
这个例子的确很经典!诠释了注解实现AOP~ 值得参考!

相关推荐

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

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

    spring aop 操作日志

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

    JAVA 中Spring aop 实现日志记载

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

    spring aop实现日志功能

    标题"spring aop实现日志功能"涉及到的是如何利用Spring AOP来记录和跟踪应用程序中的操作,这对于调试、性能分析和故障排查至关重要。下面我们将详细探讨如何通过Spring AOP来实现日志功能。 首先,理解AOP的基本...

    Spring aop 记录操作日志 Aspect 源码

    在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们在代码中实现横切关注点,如日志记录、权限控制等,而无需侵入业务逻辑。本篇将深入探讨如何使用Spring AOP来记录操作日志,并通过自定义Aspect...

    spring aop jar 包

    Spring AOP(Aspect Oriented Programming,面向切面...总的来说,Spring AOP通过提供面向切面的编程能力,极大地提高了代码的可复用性和可维护性,降低了系统复杂度,特别是在处理共性问题如日志、事务、安全等方面。

    spring aop 切面添加日志

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

    swagger和spring Aop日志结合

    6. 结合Swagger UI:Swagger UI可以展示API文档,同时,通过AOP记录的日志可以在后台系统中查看,以便分析API的使用情况。 通过这种方式,我们可以实现对Swagger定义的API的全面日志跟踪,为API的调试、性能优化和...

    spring AOP 切面日志 分层打日志

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改源代码的情况下,对程序进行横向关注点的插入,比如日志记录、事务管理、权限检查等。在这里,我们重点关注如何利用Spring AOP实现分层...

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

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

    SpringAOP的日志管理

    总结来说,Spring AOP的日志管理是一个强大的工具,它帮助我们在不干扰业务逻辑的情况下实现日志记录。在MyEclipse中配置Spring库,结合JUnit4进行测试,可以有效地实现和验证这一功能。通过定义切面和通知,我们...

    简单spring aop 例子

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...

    Spring AOP完整例子

    总结一下,Spring AOP提供了一种优雅的方式来处理系统的横切关注点,如日志记录、事务管理或性能监控。通过定义切点、创建切面和配置通知,我们可以实现代码的解耦,提高可维护性和复用性。这个例子提供了学习Spring...

    spring aop实现日志分析管理

    通过以上方式,我们可以利用Spring AOP和元注解实现灵活的日志管理和分析,同时确保日志记录对系统性能的影响最小。这在大型Java应用中尤其重要,因为它提供了宝贵的运维数据,有助于问题排查和性能优化。

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

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

    Spring AOP实现机制

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的可复用性和可维护性。 ### 1. ...

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

    ### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程...

    Spring-AOP.rar_spring aop 日志

    Spring AOP,全称为Aspect-Oriented Programming,是Spring框架中的一个重要组成部分,主要用来处理系统的横切关注点,如日志记录、事务管理、性能监控等。这些关注点通常会分散在应用程序的各个角落,而AOP就是为了...

Global site tag (gtag.js) - Google Analytics