Spring-AOP-增强

2018-06-27 09:46:41来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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>

  

  

 

  

    

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:分布式事务基于消息中间件实现

下一篇:基于SpringMVC+Spring+MyBatis实现秒杀系统【概况】