spring3的AOP示例

applicationContex.xml需要加入:
<!-- 使用注解定义切面 -->
<aop:aspectj-autoproxy proxy-target-class="true" />

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;


/**
* LOG切面类
* 主要记录Log日志
*/
@Aspect
public class LogAOP
{
   
    /** 定义共用方法切入点
     */
    @Pointcut("execution(public * *(..))")
    public void inPublicMethod()
    {
    }
   
    /** 定义数据访问类方法切入点
     */
    @Pointcut("execution(* com.huawei.support.*.dao.*.*(..))")
    public void inDAOPackage()
    {
       
    }
   
    /** 定义业务处理类方法切入点
     */
    @Pointcut("execution(* com.huawei.support.*.service.*.*(..))")
    public void inServicePackage()
    {
       
    }
   
    /** 定义对外服务类方法切入点
     */
    @Pointcut("execution(* com.huawei.support.*.ws.*.*(..))")
    public void inWebServicePackage()
    {
       
    }
   
    /** 定义总切入点
     */
    @Pointcut("inPublicMethod() && (inDAOPackage() || inServicePackage() ||inWebServicePackage())")
    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("[")
                .append(pjp.getTarget().getClass().getName())
                .append(".")
                .append(pjp.getSignature().getName())
                .append("]");
       
        long begin = System.currentTimeMillis();
        sb.append("开始时间:[").append(DateUtil.format(begin,
                DateUtil.DATE_PATTERN2)).append("]");
       
        //实际方法执行
        Object result = pjp.proceed();
       
        long end = System.currentTimeMillis();
        sb.append("结束时间:[")
                .append(DateUtil.format(end, DateUtil.DATE_PATTERN2))
                .append("]");
        sb.append("共耗费:[").append((end - begin)).append("ms]");
        log.info(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);
    }
}

你可能感兴趣的:(apache,DAO,AOP,log4j,xml)