aop实现log输出

以下都是个人的一些感想,如有错误,望告知。

面向切面编程(aop)是一种思想,我们在开发程序时会有许多的方法,假如我们想在一个方法的前后加入一些事情的话,最古老的做法是在方法里面直接添加。这样的做法会能加程序的代码量,假如程序的多个方法要加入同样的事情,那么就要在每个方法中加入相同的代码。这样的开发不利于维护,所以aop可以解决这个问题。下面看看解决方法(以xml配置文件的方式实现):

1.首先在xml文件中进行相应的配置:

aop:pointcut     指的是切入点,在这里代表HelloWorldActionDAO中的所有方法

有了切入点,就说明要在切入点上做一些事情,怎么做,做什么?

aop:around   怎么做,要用around这种方式来做,代表要包围切入点做事情,就是在切入点前后做事情。

做什么?可以看到method=“around”  代表要在around方法中做一些手脚,从而找到com.gc.action.LogTest类

注意:expressin在写时要注意里面的*,要不然会出错,这个错误在另一盘文章中有介绍。

<bean id="log" class="com.gc.action.LogTest"/>
    <aop:config>
        <aop:aspect ref="log">
            <aop:pointcut id="aopTest" expression="execution(* com.gc.action.HelloWorldActionDAO.*(..))"/>
            <aop:around method="around" pointcut-ref="aopTest"/>
        </aop:aspect>
    </aop:config>


2.com.gc.action.LogTest

pjp.proceed()  就是你实际调用的方法。比如想在调用前输出1调用后输出2,就可以像下面这样写。

注意:ProceedingJoinPoint属性要引入一个包:aspectjweaver.jar

package com.gc.action;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;

public class LogTest {

    private Logger logger=Logger.getLogger(this.getClass());
    
    public Object around(ProceedingJoinPoint pjp)throws Throwable{
        System.out.println("1");
        Object o=pjp.proceed();
        System.out.println("2");
        return o;
    }
}


这样就可以在相应的方法前后做事情,除了around外,还有after等等,详细请百度一下。

上面都是配置的流程,都是个人的经历,网对大家有用。很多详细的内容Me也在学习,望一起努力。

posted on 2012-10-11 17:24  zzjjian333  阅读(1560)  评论(0编辑  收藏  举报