Aspect 使用注解创建切面

注解创建切面是AspectJ5引入的关键特性,AspectJ面向注解的模型可以非常简便的通过少量注解把任意类转变为切面。

1.定义切面

package com.vclog.mainsite.app.controller.aspect;

import org.aspectj.lang.annotation.*;

/**
 * Created by hu on 2018-03-28.
 */
@Aspect
public class Audience {

    @Before("execution(public * com.vclog.mainsite.app.controller..*.*(..))")
    public void doBefore(){
        System.out.println("表演之前,就坐");
    }
    
    @Around("execution(public * com.vclog.mainsite.app.controller..*.*(..))")
    public void doAround(){
        System.out.println("表演中,欣赏");
    }
    
    @AfterReturning("execution(public * com.vclog.mainsite.app.controller..*.*(..))")
    public void doAfter(){
        System.out.println("表演之后,回家");
    }
    
    @AfterThrowing("execution(public * com.vclog.mainsite.app.controller..*.*(..))")
    public void doAfterErr(){
        System.out.println("表演失败之后,骂天骂地");
    }
}

    Audience类使用@AspectJ注解进行了标注,该注解表明Audience不仅仅是一个POJO,还是一个切面。Audience类中的方法都使用注解来定义切面的具体行为。

    Audience有四个方法,定义了一个观众在观看演出可能会做出的事情,可以看到,这些方法都使用了通知注解来表明它们应该在什么时候调用。AspectJ提供了五个注解来定义通知,如下表所示:


    Audience使用到了后面四个注解,doBefore( ) 方法使用到了@Before注解,表明应该在演出开始之前调用。doAround( ) 方法使用到了@Around注解,表明应该在演出中调用。doAfter( ) 方法使用到了@AfterReturning注解,它会在演出成功返回后调用。doAfterErr( ) 方法使用到了@AfterThrowing注解,这表明它会在抛出异常以后调用。

    通过看前面的代码,你可能已经发现。所有的这些注解都给定了一个切点表达式作为它的值,同时,这四个方法的切点表达式都是相同的。其实,他们可以设置成不同的切点表达式。相同的切点表达式我们重复了四遍,感觉不是很明智,这里我们可以引入切点的概念@Pointcut。

package com.vclog.mainsite.app.controller.aspect;

import org.aspectj.lang.annotation.*;

/**
 * Created by hu on 2018-03-28.
 */
@Aspect
public class Audience {

    @Pointcut("execution(public * com.vclog.mainsite.app.controller..*.*(..))")
    public void action(){
        
    }
    
    @Before("action()")
    public void doBefore(){
        System.out.println("表演之前");
    }

    @Around("action()")
    public void doAround(){
        System.out.println("表演中");
    }

    @AfterReturning("action()")
    public void doAfter(){
        System.out.println("表演之后");
    }

    @AfterThrowing("action()")
    public void doAfterErr(){
        System.out.println("表演失败之后");
    }
}
    在Audience中,action( ) 方法使用了@Pointcut注解。为@Pointcut注解设置的值是一个切点表达式,就像之前在通知注解上所设置的那样。通过在action( ) 方法上添加@Pointcut注解,实际上扩展了切点表达语言,这样就可以在任何的切点表达式中使用action( )。

猜你喜欢

转载自blog.csdn.net/damon_01/article/details/79728075