Spring中AOP的操作

1 篇文章 0 订阅
1 篇文章 0 订阅

1、切入指定方法

切入方法

/**
 * @Author King
 * @Date 2022/6/13
 */
@RestController
@RequestMapping("/")
public class AopDemo {

    @GetMapping("/test")
    public void test(){
        System.err.println("执行内容。。。。。。");
    }
}

@Aspect配置类

/**
 * Aspect 注解切面,指定方法切入
 *
 * @Author King
 * @Date 2022/6/13
 */
@Component
@Aspect
public class AopConfig {

    //前置通知
    @Before(value = "execution(* com.king.demo.web.AopDemo.test(..))")
    public void before() {
        System.out.println("before.....");
    }

    // 最终通知, 不管有没有异常都通知
    @After(value = "execution(* com.king.demo.web.AopDemo.test(..))")
    public void after() {
        System.out.println("after.....");
    }

    //返回通知, 返回值执行完才通知   //后置通知
    @AfterReturning(value = "execution(* com.king.demo.web.AopDemo.test(..))")
    public void afterReturning() {
        System.out.println("afterReturning.....");
    }

    //异常通知
    @AfterThrowing(value = "execution(* com.king.demo.web.AopDemo.test(..))")
    public void afterThrowing() {
        System.out.println("afterThrowing.....");
    }

    //环绕通知, 方法前后都执行
    @Around(value = "execution(* com.king.demo.web.AopDemo.test(..))")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("around.....环绕之前....");
        proceedingJoinPoint.proceed();
        System.out.println("around.....环绕之后.....");

    }
}

执行结果

around.....环绕之前....
before.....
执行内容。。。。。。
afterReturning.....
after.....
around.....环绕之后.....

2、切入指定方法-自定义注解

切入方法

/**
 * @Author King
 * @Date 2022/6/13
 */
@RestController
@RequestMapping("/")
public class AopDemo {

    @GetMapping("/test")
    @King(value = "king")
    public void test(){
        System.err.println("执行内容。。。。。。");
    }
}

自定义注解类

/**
 * @Author King
 * @Date 2022/6/13
 */
@Documented
@Target(value={ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface King {

    String value() default "";
}

具体切入逻辑

/**
 * @Author King
 * @Date 2022/6/13
 */
@Component
@Aspect
public class KingAno {

    @Pointcut("@annotation(com.king.demo.config.King)")
    private void pointcut(){

    }

    @Around(value = "pointcut() && @annotation(king)")
    public void around(ProceedingJoinPoint proceedingJoinPoint, King king) throws Throwable {
        System.err.println("注解value字段值:"+king.value());
        proceedingJoinPoint.proceed();
    }
}

执行结果

注解value字段值:king
执行内容。。。。。。

3、切入指定方法-自定义注解-指定参数

切入方法

@RestController
@RequestMapping("/")
public class AopDemo {

    @GetMapping("/test")
    @King(value = "king")
    public void test(String str){
        System.err.println("执行内容。。。。。。");
    }
}

具体切入逻辑代码

@Component
@Aspect
public class KingAno {

    @Pointcut("@annotation(com.king.demo.config.King) && args(java.lang.String)")
    private void pointcut(){

    }

    @Around(value = "pointcut() && @annotation(king)")
    public void around(ProceedingJoinPoint proceedingJoinPoint, King king) throws Throwable {
        System.err.println("注解value字段值:"+king.value());
        proceedingJoinPoint.proceed();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值