`

Spring AOP进行日志记录管理(别人写的,很好)

    博客分类:
  • java
阅读更多

在java开发中日志的管理有很多种。我一般会使用过滤器,或者是Spring的拦截器进行日志的处理。如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个方法的调用。然后进行日志记录。使用过滤器的好处是可以自己选择性的对某一些方法进行过滤,记录日志。但是实现起来有点麻烦。
             另外一种就是使用Spring的AOP了。这种方式实现起来非常简单,只要配置一下配置文件就可以了。可是这种方式会拦截下所有的对action的每个操作。使得效率比较低。不过想做详细日志这个方法还是非常好的。下面我就介绍一下使用Spring AOP进行日志记录的方式。
        第一种。Spring AOP对普通类的拦截操作
             首先我们要写一个普通类,此类作为日志记录类。 比如


           

 package chen.hui.log
             public classs MyLog{
                       //在类里面写方法,方法名诗可以任意的。此处我用标准的before和after来表示
                      public void before(){
                                System.out.println("被拦截方法调用之前调用此方法,输出此语句");
                      }
                      public void after(){
                                  System.out.println("被拦截方法调用之后调用此方法,输出此语句");
                      }
            }

 
             其次我们在写一个类作为被拦截类(Spring的AOP就是拦截这个类里面的方法)
             

package chen.hui.log
             public class Test{//此类中方法可以写任意多个。我只写一个
                          public void test(){
                                Sytem.out.println("测试类的test方法被调用");
                          }
             }

 
             最后进行配置文件的编写。在Spring的配置文件中我们需要进行几句话的配置
               

 <bean id="testLog" class="chen.hui.log.MyLog"></bean> <!--将日志类注入到bean中。-->
     
                 <aop:config>
                             <aop:aspect id="b" ref="testLog"><!--调用日志类-->
                            <aop:pointcut id="log" expression="execution(* chen.hui.log.*.*(..))"/><!--配置在log包下所有的类在调用之前都会被拦截-->
                            <aop:before pointcut-ref="log" method="before"/><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的before方法-->
                            <aop:after pointcut-ref="log" method="after"/>><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的after方法-->

                            </aop:aspect>
   
                 </aop:config>

 

到此处整个程序完成,在MyLog类里面的before和after方法添加日志逻辑代码就可以完成日志的管理。以上是对普通类的管理,如果只想拦截某一个类。只要把倒数第二个 *  改成类名就可以了。

          第二:使用Spring AOP对action做日志管理
          如果是想拦截action对action做日志管理,基本和上面差不多,但是要注意。以下几点
首先还是要写一个普通类,不过此类中的方法需要传入参数。 比如
           

 package chen.hui.log
            import org.aspectj.lang.JoinPoint;
             public classs MyLog{
                       //在类里面写方法,方法名诗可以任意的。此处我用标准的before和after来表示
                        //此处的JoinPoint类可以获取,action所有的相关配置信息和request等内置对象。
                      public void before(JoinPoint joinpoint){
                                joinpoint.getArgs();//此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
                                System.out.println("被拦截方法调用之前调用此方法,输出此语句");
                      }
                      public void after(JoinPoint joinpoint){
                                  System.out.println("被拦截方法调用之后调用此方法,输出此语句");
                      }
            }

 
             其次我们在写一个action类作为被拦截类(Spring的AOP就是拦截这个类里面的方法)
             

package chen.hui.log
             public class LoginAction{//此类中方法可以写任意多个。我只写一个
                          public void test(){
                                Sytem.out.println("测试类的test方法被调用");
                          }
             }

 
             最后进行配置文件的编写。在Spring的配置文件中我们需要进行几句话的配置
               

 <bean id="testLog" class="chen.hui.log.MyLog"></bean> <!--将日志类注入到bean中。-->
     
                 <aop:config>
                             <aop:aspect id="b" ref="testLog"><!--调用日志类-->
                            <aop:pointcut id="log" expression="execution(* chen.hui.log.*.*(..))"/><!--配置在log包下所有的类在调用之前都会被拦截-->
                            <aop:before pointcut-ref="log" method="before"/><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的before方法-->
                            <aop:after pointcut-ref="log" method="after"/>><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的after方法-->

                            </aop:aspect>
   
                 </aop:config>

 

                除了参数外其他地方基本和普通类相似。
               需要注意的是:普通类可以监控单一的类,而action在配置文件中只能到包名而不能到action的类名。不然会报错。就是说如果要记录日志就要记录所有的action而不能记录其中一个,这是我试了好久得出的结果。如果有高手知道怎么记录单一的action或者有朋友有任何问题可以留下联系方式,大家相互交流,共同进步。

 

 

分享到:
评论

相关推荐

    spring aop 切面添加日志

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改源代码的情况下,对程序的关键行为进行增强或监控。本项目旨在演示如何在Spring AOP中添加日志功能,以实现对应用程序执行过程的透明跟踪...

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

    这种通过代理模式实现的AOP方法,可以很好地将业务逻辑代码与额外的横切关注点分离,使得代码更加清晰,易于维护。如果将来需要去除日志记录功能,只需要替换掉代理类的实例,而不需要修改任何业务逻辑代码。此外,...

    SpringAOP.zip

    Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。

    spring aop简单应用示例

    在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改原有业务代码的情况下,实现如日志记录、性能监控、事务管理等横切关注点的功能。本示例将深入探讨Spring AOP的基础知识,以及如何在...

    Spring aop代码

    这个压缩包文件"Spring AOP代码"很可能包含了一些示例代码,用于演示如何在Spring框架中使用AOP进行功能的扩展和模块的解耦。 AOP的核心概念是切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点...

    spring aop实例

    提供的压缩包中包含了一个名为"Spring+AOP中文教程.doc"的Word文档,它详细介绍了Spring AOP的基本概念和使用方法,对于初学者来说是一份很好的学习资料。 另一个文件"testaop"是一个MyEclipse项目,包含了实际的...

    Spring aop使用探究实例

    Spring AOP,全称为Spring的面向切面编程,是一种编程范式,用于将关注点分离,使得业务逻辑和横切关注点(如日志、事务管理等)解耦。Spring框架通过AOP来实现这种解耦,使得核心业务代码不受横切逻辑的影响,提升...

    Spring AOP实现 项目源码 Myeclipse 直接导入可用

    其中,AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者将关注点从核心业务逻辑中分离出来,如日志记录、事务管理等,这些被称为“切面”的功能可以被模块化并独立处理。...

    Spring AOP配置实例

    在Spring中,AOP主要用于实现日志记录、事务管理、性能监控等功能。 **配置Spring AOP的基本步骤** 1. **引入依赖** 首先,你需要在项目中引入Spring AOP的依赖。如果你使用的是Maven,可以在pom.xml文件中添加...

    使用SpringAop使用Oracle数据权限控制

    同时,由于Spring AOP的切面是解耦的,所以这种设计也具有很好的可扩展性和维护性。 在实际项目中,可能还需要考虑其他因素,如缓存策略、性能优化以及与其他安全框架(如Spring Security)的协同工作等。总的来说...

    SpringAOP示例讲解

    `SpringAop.ppt`文件很可能包含了一个详细的讲解,涵盖了Spring AOP的基本概念、配置方式、使用注解声明切面、基于XML的配置以及如何自定义切面。PPT通常会通过图表、代码示例和流程图来帮助理解复杂的概念,使得...

    Spring MVC AOP通过注解方式拦截Controller等实现日志管理demo版本2

    在Spring MVC框架中,AOP(面向切面编程)是一种强大的工具,用于实现跨切面的关注点,如日志管理、事务控制等。...同时,这也是一个很好的起点,帮助你进一步探索Spring AOP在事务管理、安全控制等其他领域的应用。

    使用Spring配置文件实现AOP

    在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...

    Spring Aop demo

    在Spring框架中,AOP用于处理系统中的横切关注点,比如日志记录、事务管理、权限验证等,这些功能往往需要在多个类或方法中重复实现。通过AOP,我们可以把这些通用的功能模块化,然后在需要的地方进行“织入”,提高...

    spring aop 详细介绍

    Spring AOP常用于日志记录、事务管理、性能监控、安全控制等方面,这些功能往往与业务逻辑本身无关,但又需要在多个地方进行应用,AOP提供了很好的解决方式。 通过以上内容,我们可以了解到Spring AOP的基本概念和...

    SpringAOP简单项目实现

    总结,这个"SpringAOP简单项目实现"涵盖了Spring AOP的基础知识,包括切面、通知、切入点的定义与配置,以及如何在实际项目中使用Maven进行构建和依赖管理。对于初学者来说,这是一个很好的实践案例,能够帮助他们...

    李君老师JavaEE笔记-SpringAop

    ### 李君老师JavaEE笔记-SpringAop详解 #### 概述 李君老师的JavaEE笔记中的SpringAop部分,深入浅出地讲解了面向切面...李君老师的笔记为初学者提供了一个很好的起点,帮助他们掌握Spring AOP的基本原理和实践技巧。

    spring-aop面向切面系统日志案例

    总之,这个“spring-aop面向切面系统日志案例”是一个很好的起点,它帮助开发者理解如何在Spring框架中利用AOP来优雅地处理日志记录,同时也为其他横切关注点的处理提供了基础。通过学习和实践,你可以进一步掌握...

    aop_log.rar_spring aop

    在Java Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许程序员将关注点分离,比如日志、事务管理等,从核心...通过研究和学习这个例子,开发者可以更好地理解和掌握Spring AOP在日志记录方面的应用。

    springAOP演示例子

    这个"springAOP演示例子"很可能会包含一个简单的Spring项目,展示如何创建和配置切面,定义切入点和通知,并观察其在实际代码中的工作原理。通过深入理解和实践这个例子,你可以更好地掌握Spring AOP的使用,提升你...

Global site tag (gtag.js) - Google Analytics