zoukankan      html  css  js  c++  java
  • Spring-AOP-增强

    Spring AOP 又称 面向切面编程,要实现AOP就要有切点,增强,织入,连接点,切面...

    增强又分为:前置增强,后置增强,异常抛出增强,环绕增强,后置增强,最终增强

    编写配置文件中的增强代码之前我们先创建一个增强类,用于存放增强的代码:  

    import org.apache.log4j.Logger;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    
    
    public class UserAdvice {
        private Logger log=Logger.getLogger(UserAdvice.class);
        //前置增强
        public void before(JoinPoint j)
        {
            String methodName=j.getSignature().getName();
            String className=j.getTarget().getClass().getName();
            log.info(className+"类"+methodName+"方法的前置增强");
        }
        //异常抛出增强
        public void afterThrowing(JoinPoint j,Exception e)
        {
            String methodName=j.getSignature().getName();
            String className=j.getTarget().getClass().getName();
            log.info(className+"类"+methodName+"方法异常:"+e.getMessage());
        }
        //后置增强
        public void afterreturning(JoinPoint j)
        {
            String methodName=j.getSignature().getName();
            String className=j.getTarget().getClass().getName();
            log.info(className+"类"+methodName+"方法的后置增强");
        }
        //最终增强
        public void after(JoinPoint j){
            String methodName=j.getSignature().getName();
            String className=j.getTarget().getClass().getName();
            log.info(className+"类"+methodName+"方法的最终增强");
        }
        //环绕增强
        public Object around(ProceedingJoinPoint j)
        {
            Object resoult=null;
            log.info("环绕前");
            try {
                resoult=j.proceed();
                log.info("环绕后");
            } catch (Throwable e) {
                e.printStackTrace();
            }
            return resoult;
        }
    } 

      配置文件中:

    <!--创建增强类的bean-->
    <bean id="adv" class="cn.bdqn.dao.UserAdvice"></bean> <aop:config>
        <!--定义切点 expression允许使用的范围--> <aop:pointcut expression="execution(* cn.bdqn.service..*.*(..))" id="p1"/>
         <!--引用增强类--> <aop:aspect ref="adv">
           <!--method对应的是增强类中对应的方法,pointcut-ref对应的是切点-->
    <aop:before method="before" pointcut-ref="p1" /><!--前置增强 在方法执行前执行-->
           <!--后置增强 在方法执行完执行--> <aop:after-returning method="afterreturning" pointcut-ref="p1"/>
           <!--异常抛出增强 在方法执行处错误时执行--> <aop:after-throwing method="afterThrowing" pointcut-ref="p1" throwing="e"/>
           <!--最终增强 无论方法是否出现异常都会执行--> <aop:after method="after" pointcut-ref="p1"/>
           <!--环绕增强 在方法执行前和方法执行后执行--> <aop:around method="around" pointcut-ref="p1"/> </aop:aspect> </aop:config>

      

      

     

      

        

  • 相关阅读:
    codeforces 701 D. As Fast As Possible(数学题)
    codeforces 807 E. Prairie Partition(贪心+思维)
    codeforces 807 D. Dynamic Problem Scoring(贪心+思维)
    codeforces 807 C. Success Rate(二分)
    Atcoder C
    Atcoder D
    hdu 3308 LCIS(线段树区间合并)
    SpringMVC学习笔记---
    Composer Yii2 不设置全局变量 归档安装 Win7
    电脑硬件扫盲--CPU 显卡
  • 原文地址:https://www.cnblogs.com/MyQuen/p/9223174.html
Copyright © 2011-2022 走看看