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;

@Aspect
public 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 配置

  <bean id="logExe" class="com.richie.framework.service.LogExAop">
 </bean>

猜你喜欢

转载自elfkingw.iteye.com/blog/1513066