一、 切面优先级
我们可以声明多个切面类,它们可以同时应用在同一个Target上,但是问题出现了,它们的执行顺序是怎么样的,Spring AOP提供了一个注解用于解决这个问题,@Order,该注解只有一个字段值,默认是整数最大值,也就是最小优先级,说明
它的值越小,优先级越高。示例如下:
@Aspect
@Order(1)
@Component
public class LoggingAspect {
//...
}
二、 切点表达式重用
之前我们每声明一个类型的Advice,都会重新写它的切点表达式,但是如果这些切点表达式是重复的,则可以将它们重用,通过使用@Pointcut注解声明一个切面达到这一目的,别的Advice只要引用这个注解标识的方法即可,其他示例如下:
@Pointcut("execution(* com.tools.anonymization.controller.AnonymizationController.*(..))")
public void pointcut(){}
@Before("pointcut()")
public void loggingBefore(JoinPoint joinPoint){
logger.info("request parameters: {}", joinPoint.getArgs());
}
别的Advice引用时,直接在原来声明切点表达式的地方写入该方法即可。
该方法的返回值必须是void类型,其中一般也不添加任何代码,只是和对应的切点表达式绑定在一起,以实现重用的目的。
三、 AOP的XML配置方式
之前我们配置AOP的方式都是通过注解的方式,通过xml的方式也可以实现AOP的配置,但是相对于注解的方式有点繁琐(至少我是这么认为的),所以就不展开说明了,但是作为AOP的一部分,有必要提出来,如果以后有需要的,可以到下面的链接中查看。
http://my.oschina.net/itblog/blog/212056