springboot中aop的使用

      在公司新入一个项目组,用到了很多的注解式aop拦截器,以前学习只限于理论,发现在实际应用中用到了又是一番更深的感受。最大的感受就是方便,简单。了解公司中的应用方式,决定要积累一下,但是感觉自己文笔有限,所以就上网查看学习,发现了一个简单易学的一个文章,转载过来供自己学习。本文章仅限于入门,如果想和楼主一样有一种茅塞顿开的感受的话,建议还是在实际项目中应用一下,你会感受到神奇的!

文章部分采用如下:

首先为你的SpringBoot项目添加maven依赖,让其支持aop(其实就是自动引入aop需要的一些jar)

在pom.xml中添加依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

然后创建Aspect测试类:

package com.shanhy.sboot.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Aspect // FOR AOP
@Order(-99) // 控制多个Aspect的执行顺序,越小越先执行
@Component
public class TestAspect {

    @Before("@annotation(test)")// 拦截被TestAnnotation注解的方法;如果你需要拦截指定package指定规则名称的方法,可以使用表达式execution(...),具体百度一下资料一大堆
    public void beforeTest(JoinPoint point, TestAnnotation test) throws Throwable {
        System.out.println("beforeTest:" + test.name());
    }

    @After("@annotation(test)")
    public void afterTest(JoinPoint point, TestAnnotation test) {
        System.out.println("afterTest:" + test.name());
    }

}

这样就完成了,然后创建一个Controller验证一下:

@RestController
@RequestMapping("/test")
public class TestController {

    @TestAnnotation(name="abc")
    @RequestMapping("/show")
    public String show() {
        return "OK";
    }

    @RequestMapping("/show2")
    public String show2() {
        return "OK2";
    }
}

此时我们访问show请求,就会被拦截,控制台会打印输出。如果请求show2则不会被拦截。

注意: 
1、在application.properties中也不需要添加spring.aop.auto=true,因为这个默认就是true,值为true就是启用@EnableAspectJAutoProxy注解了。 
2、你不需要手工添加 @EnableAspectJAutoProxy 注解。 
3、当你需要使用CGLIB来实现AOP的时候,需要配置spring.aop.proxy-target-class=true,这个默认值是false,不然默认使用的是标准Java的实现。

其实aspectj的拦截器会被解析成AOP中的advice,最终被适配成MethodInterceptor,这些都是Spring自动完成的



以上是部分转载,原文地址如下:https://blog.csdn.net/catoop/article/details/71541612

猜你喜欢

转载自blog.csdn.net/u013045959/article/details/80206513