读书人

Spring3 aop 例证

发布时间: 2012-06-26 10:04:14 作者: rapoo

Spring3 aop 例子

package com.richie.framework.service;import org.apache.log4j.Logger;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;@Aspectpublic class LogExAop {public static int PROCESS_TIME_OUT =12;   /** 定义共用方法切入点      */     @Pointcut("execution(public * *(..))")     public void inPublicMethod()     {     }         /** 定义数据访问类方法切入点      */     @Pointcut("execution(* com.richie.*.dao.*.*(..))")     public void inDAOPackage()     {     }         /** 定义业务处理类方法切入点      */     @Pointcut("execution(* com.richie.*.service.*.*(..))")     public void inServicePackage()     {             }         /** web层方法切入点      */     @Pointcut("execution(* com.richie.*.web.*.*(..))")     public void inWebPackage()     {             }         /** 所有的public方法(包括web、service)      */     @Pointcut("inPublicMethod() && (inDAOPackage()||inServicePackage() ||inWebPackage())")     public void supportAOP()     {             }         /** 切入点执行范围   主要记录类处理花费时间  主要用于调试用     * @param pjp       切入点      * @throws Throwable 切入点抛出的异常      */     @Around("supportAOP()")     public Object doAround(ProceedingJoinPoint pjp) throws Throwable     {         Logger log = Logger.getLogger(pjp.getTarget().getClass());         StringBuilder sb = new StringBuilder();         sb.append("\n==================【")                 .append(pjp.getTarget().getClass().getName())                 .append(".")                 .append(pjp.getSignature().getName())                 .append("】");                 long begin = System.currentTimeMillis();         //实际方法执行         Object result = pjp.proceed();         long end = System.currentTimeMillis();         sb.append("花费时间:[").append((end - begin)/1000).append("s]");         log.debug(sb.toString());         return result;     }         /** 切入点抛出异常 记录日志     * @param jp        切入点      * @param ex        抛出的异常      */     @AfterThrowing(pointcut = "supportAOP()", throwing = "ex")     public void doThrowing(JoinPoint jp, Throwable ex)     {         Logger log = Logger.getLogger(jp.getTarget().getClass());         log.error(ex.getMessage(), ex);     }         }

?注意点:

1. Spring的配置中引入下列元素来启用Spring对@AspectJ的支持:

? ? ? ?<aop:aspectj-autoproxy ?/>?

2.LogExAop 要在Spring 作为bean 配置

?

读书人网 >开源软件

热点推荐