Spring学习之AOP总结帖(2)

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/aop "> <!-- 自动扫描 --> <context:component-scan base-package="com.aop"/> <!-- 使用AspjectJ自动生成代理对象 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans>

  测试类AopTest类:

public class AopTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("aopContext.xml"); Hello hello = context.getBean(Hello.class); hello.hi(); } }

  最后的输出结果为:

Spring学习之AOP总结帖

  现在问题来了,各种通知的顺序是如何呢?其实从输出结果中也可以看出来。同一个类中的各种通知执行顺序是:

Around之前通知 >= Before通知 >= 目标方法执行 >= Around之后通知 >= After通知 >= AfterReturn通知

2.4 指定切面的优先级

  在同一个连接点上应用不止一个切面时, 除非明确指定, 否则它们的优先级是不确定的。切面的优先级可以通过实现 Ordered 接口或利用 @Order 注解指定。实现 Ordered 接口, getOrder() 方法的返回值越小, 优先级越高.若使用 @Order 注解, 序号出现在注解中。

@Aspect @Order(0) @Component public class HelloAspect2 { } @Aspect @Order(1) @Component public class HelloAspect { }

2.5 重用切入点定义

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0935020e20a7d2007f3d71ebf62dc710.html