相比较于拦截器,Spring 的aop则功能更强大,封装的更细致,需要单独引用 jar包。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> //当然引入web stater就不必单独引入aop
在定义AOP的类时,不需要和前面拦截器一样麻烦了,只需要通过注解,底层实现逻辑都通过IOC框架实现好了,涉及到的注解如下:
@Aspect:将一个 java 类定义为切面类。
@Pointcut:定义一个切入点,可以是一个规则表达式,比如下例中某个 package 下的所有函数,也可以是一个注解等。
@Before:在切入点开始处切入内容。
@After:在切入点结尾处切入内容。
@AfterReturning:在切入点 return 内容之后处理逻辑。
@Around:在切入点前后切入内容,并自己控制何时执行切入点自身的内容。原则上可以替代@Before和@After。
@AfterThrowing:用来处理当切入内容部分抛出异常之后的处理逻辑。
@Order(100):AOP 切面执行顺序, @Before 数值越小越先执行,@After 和 @AfterReturning 数值越大越先执行。
主要应用(记录日志和全局事务处理)地址如下