spring-第十九篇AOP面向切面编程之增强处理的优先级

1、从我们第十七篇举例了不同类型的增强处理。

     spring AOP采用和AspectJ一样的优先顺序来织入增强处理:在“进入”连接点时,具有最高优先级的增强处理将先被织入(在给定的两个Before增强处理,优先级高的将会先被执行),在“退出”连接点时,具有最高优先级的增强处理会最后被织入(在给定的两个After增强处理中,优先级高的那个会后执行)。

     当不同切面里的两个增强处理需要在同一个连接点被织入时,spring AOP将以随机的顺序来织入这两个增强处理。如果用户应用需要指定不同切面类里的增强处理的优先级,spring提供了如下两种解决方案:

       1》让切面类实现org.springframework.core.Ordered接口,实现该接口只需要实现一个int getOrder()方法,该方法的返回值越小,则优先级越高。

       2》直接使用@Order注解来修饰一个切面类,使用@Order注解时可指定一个int型的value属性,该属性值越小,则优先级越高。

     同一个切面类里的两个相同类型的增强处理在同一个连接点被织入时,spring AOP将以随机的顺序来织入这两个增强处理,程序没有办法控制它们的织入顺序。如果确实需要控制它们的执行顺序,可以将业务处理明确的分配到能够区分优先级的增强处理中;或者将不同的增强处理重构到不同的切面类中,通过在切面类级别上进行执行顺序的控制。

2、未完待续...

原文地址:https://www.cnblogs.com/ZeroMZ/p/11337424.html