• 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>

      

      

     

      

        

  • 相关阅读:
    HBase 超详细介绍
    写在之前
    【CF】38E Let's Go Rolling! (dp)
    [CF] E. Camels
    CF9D How many trees? (dp)
    [CF] 8C Looking for Order
    CF dp 题(1500-2000难度)
    NOIP原题板刷
    Codeforces Round #595 (Div. 3) 题解
    CSP-S2019 停课日记
  • 原文地址:https://www.cnblogs.com/MyQuen/p/9223174.html
Copyright © 2020-2023  润新知