美文网首页
Spring aop

Spring aop

作者: 随风而逝1027 | 来源:发表于2017-03-30 16:35 被阅读0次

    两种方法配置

    http://www.cnblogs.com/davidwang456/p/4013631.html

    1.注解

    1)Aspect定义一个切面 在切面定义切入点@Pointcut

    并定义通知类型@Before @AfterReturning @After @AfterThrowing @Around

    2)开发需要被拦截的类

    3)将切面配置到xml中,也可以使用自动扫描Bean的方式,交由SpringAop容器管理

    需要引用的jar包aspectjweaver.jar aspectjrt.jar

    @Component

    //声明这是一个切面Bean

    @Aspect

    public class ServiceAspect {

    private final static Log log = LogFactory.getLog(ServiceAspect.class);

    //配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点

    @Pointcut("execution(* cn.ysh.studio.spring.aop.service..*(..))")

    public void aspect(){ }

    /*

    * 配置前置通知,使用在方法aspect()上注册的切入点

    * 同时接受JoinPoint切入点对象,可以没有该参数

    */

    @Before("aspect()")

    public void before(JoinPoint joinPoint){

    if(log.isInfoEnabled()){

    log.info("before " + joinPoint);

    }

    }

    //配置后置通知,使用在方法aspect()上注册的切入点

    @After("aspect()")

    public void after(JoinPoint joinPoint){

    if(log.isInfoEnabled()){

    log.info("after " + joinPoint);

    }

    }

    //配置环绕通知,使用在方法aspect()上注册的切入点

    @Around("aspect()")

    public void around(JoinPoint joinPoint){

    long start = System.currentTimeMillis();

    try {

    ((ProceedingJoinPoint) joinPoint).proceed();

    long end = System.currentTimeMillis();

    if(log.isInfoEnabled()){

    log.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms!");

    }

    } catch (Throwable e) {

    long end = System.currentTimeMillis();

    if(log.isInfoEnabled()){

    log.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms with exception : " + e.getMessage());

    }

    }

    }

    //配置后置返回通知,使用在方法aspect()上注册的切入点

    @AfterReturning("aspect()")

    public void afterReturn(JoinPoint joinPoint){

    if(log.isInfoEnabled()){

    log.info("afterReturn " + joinPoint);

    }

    }

    //配置抛出异常后通知,使用在方法aspect()上注册的切入点

    @AfterThrowing(pointcut="aspect()", throwing="ex")

    public void afterThrow(JoinPoint joinPoint, Exception ex){

    if(log.isInfoEnabled()){

    log.info("afterThrow " + joinPoint + "\t" + ex.getMessage());

    }

    }

    }

    2.xml方式

    相关文章

      网友评论

          本文标题:Spring aop

          本文链接:https://www.haomeiwen.com/subject/wxfpottx.html