`

Spring AOP进行日志记录,管理 (使用Spring的拦截器功能获取对action中每个方法的调用情况,在方法调用前

阅读更多

原文地址:http://hi.baidu.com/wolf_childer/item/f0b5b0e664252cacc10d75d1

       在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而不能记录其中一个,这是我试了好久得出的结果。

分享到:
评论

相关推荐

    Flex-Spring拦截器

    Flex-Spring 拦截器是 Spring 框架与 Adobe Flex 之间的集成关键部分,它允许在服务调用之间添加拦截逻辑,从而实现如事务管理、权限验证、日志记录等功能。这篇博客(https://rogerhunt.iteye.com/blog/608778)...

    struts2+spring4+mybatis3,登录jquery ajax,struts拦截器,springAOP的例子

    在这个例子中,Spring4用于管理对象的生命周期和依赖关系,同时,AOP用于实现代码的解耦,比如在登录操作中,可以使用AOP来实现登录日志记录或权限检查。 3. **MyBatis3**:MyBatis是一个持久层框架,它允许开发者...

    Spring动态代理

    在Spring MVC中,我们可以使用Spring的AOP支持来创建拦截器(Interceptor),这些拦截器可以在方法执行前和执行后执行自定义逻辑,如记录日志。在RESTful服务中,这种功能尤其有用,因为它可以帮助我们了解API的调用...

    struts2- 2.3.15.3 spring3.2.4 mybatis-3.2.3 通用分页(不同数据库) 拦截器

    为了实现这个通用分页的功能,开发者可能创建了一个自定义的拦截器,该拦截器会捕获到请求中的分页参数,并在调用实际业务方法之前,对查询条件进行处理,使得查询结果自动按需分页。此外,可能还涉及到了Spring的...

    struts2+hirbenate+SpringAOP

    在这个实际案例中,Struts2、Hibernate和Spring AOP被集成使用,构建了一个完整的Web应用。以下是关于这三个框架的详细知识: 1. **Struts2**: - **工作原理**:Struts2基于拦截器(Interceptor)模式,通过配置...

    Struts2拦截器及其用法详细说明

    拦截器是基于AOP(面向切面编程)思想的组件,它可以理解为在Action调用前后插入的逻辑处理。在Struts2中,这些处理逻辑被封装在独立的类中,当请求到达Action之前,拦截器会按照预定义的顺序执行,执行完后再继续...

    S2SH配置部署日志切面拦截器

    这样的拦截器允许我们对应用程序中的特定方法调用进行拦截,并在调用前后记录日志信息,以提升系统的可追踪性和调试能力。 首先,我们需要理解S2SH框架的核心组件。Spring是依赖注入(DI)和面向切面编程(AOP)的...

    java拦截器

    例如,在Webwork框架中,拦截器被称为动态拦截Action调用的对象。它不仅允许开发者定义在Action执行前后执行的代码,还可以在Action执行前阻止其执行。此外,拦截器还提供了一种提取Action中可重用部分的有效途径。 ...

    浅谈Struts2拦截器的原理与实现.docx

    在Action的执行过程中,这些拦截器会被依次调用,每个拦截器都有机会在Action方法执行前后进行干预。拦截器栈的顺序至关重要,因为它们会按照定义的顺序逐个执行,先定义的拦截器先执行,后定义的后执行。 3. **...

    J2EE拦截器实例

    在J2EE框架如Struts2或Spring MVC中,拦截器是一种AOP(面向切面编程)概念的具体实现,用于拦截并处理特定的请求或方法调用。它们可以用来进行权限检查、日志记录、性能监控、事务管理等通用任务,从而提高代码的可...

    ssh2-aop这是一个用来做登录、登出日志的系统

    在SSH2-AOP中,可能有一个或多个拦截器专门负责记录用户登录和登出的时间、IP地址等信息。 - **切点(Join Points)**:AOP中的切点是程序执行的特定位置,如方法调用。在登录和登出流程中,切点可能是登录和登出...

    struts2 spring hibernate integration

    6. 在Action中调用Service层方法进行业务逻辑处理,Service层通过SessionFactory操作数据库。 7. 定义Struts2的结果类型,将模型数据传递给视图展示。 通过这样的集成,开发者可以专注于业务逻辑,而无需过多关注...

    struts2拦截器实现权限控制

    在Struts2中,拦截器是基于AOP(面向切面编程)的概念设计的,它们在Action调用前后执行,可以添加额外的功能,如日志记录、事务管理、权限验证等。对于权限控制,拦截器可以在请求到达Action之前检查用户的登录状态...

    方法过滤器日志实现

    这是一个Spring MVC或Struts2框架中的拦截器实现,它的主要任务是在方法调用前后插入日志记录。拦截器是AOP(面向切面编程)的一种表现形式,允许我们在不修改目标方法代码的情况下,对方法的执行进行增强。在`...

    Spring in Action.中文+ 英文版.

    2. **面向切面编程**:AOP提供了一种将关注点分离的方法,允许开发者定义“切面”,这些切面可以在程序运行的关键点上执行,如方法调用前后的拦截、异常处理等。Spring的AOP支持通过代理模式实现。 3. **Spring MVC...

    过滤器与拦截器的区别

    拦截器利用反射机制,可以在调用目标方法前后插入自定义的代码,实现如日志记录、事务管理、权限验证等功能。与过滤器不同,拦截器不依赖于Servlet容器,而是直接作用于应用程序的业务逻辑层,如Service或Action方法...

    登陆拦截器

    在这个架构中,“登陆拦截器”扮演着至关重要的角色,它负责在用户尝试访问特定资源前进行身份验证和授权。在本场景中,我们将深入探讨SSH框架中的拦截器机制以及如何实现一个简单的登录功能来连接数据库。 首先,...

    Spring与Struts 2整合.zip

    通过Action配置,开发者可以定义请求到特定的方法,并且可以利用拦截器实现通用的功能,如权限检查、日志记录等。 **Spring与Struts 2整合** 整合Spring和Struts 2的主要目的是将Spring的依赖注入和管理能力引入到...

    Struts2的拦截器

    拦截器可以实现在Action执行前后进行一些操作,如权限检查、日志记录、数据校验等,从而避免在每个Action中重复编写相同的代码。Struts2提供了丰富的内置拦截器,同时也支持用户自定义拦截器。 #### 内置拦截器功能...

Global site tag (gtag.js) - Google Analytics