关于AOP 的切点的作用范围详解(一)

7 篇文章 0 订阅
2 篇文章 0 订阅
简述

AOP,即一种切面编程,可对目标起到一定的增强作用,AOP可用于日志记录,事务操作等;AOP的作用目标颗粒度是方法,可以注解@Pointcut 作切点定义,今天就讲一下注解值中使用execution方式的一些注意点。(阅读本文1分钟)

实践

1、引入依赖:

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

2、execution 可作用在包名、类名、模糊方法上,请看下面示例:

@Slf4j
@Aspect
@Component
public class LogAspect {
    //作用在指定类上
    @Pointcut(value = "execution(public * com.demo.ypk.mybatisplus.controller.TestController.*(..))")
    public void log() {

    }

    /**
     * 环绕通知
     * @param joinPoint
     * @return
     */
    @Around(value = "log()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("------------------打印入参-----------------");
        log.info(new ObjectMapper().writeValueAsString(joinPoint.getArgs()));
        return joinPoint.proceed();
    }
}

在这里插入图片描述

启动项目,请求接口

http://localhost:8080/get?name=%E5%A5%A5%E6%9C%AF%E5%A4%A7%E5%B8%88%E5%A4%9A&age=34

在这里插入图片描述
在这里插入图片描述

3、接口上变化一下,在接口方法中再调用一个public方法,按照execution切点的定义是可作用在TestController类的所有public方法

这是怎么回事??

这其实是符合事实的,切点虽然定了可作用于所有public方法,但AOP作用的是代理类的方法,像上面这种情况直接调用同类方法是不走代理类的,因此AOP作用不到;

下面我们再变化一下即可达到我们的预期:

符合预期

OK,此文实践重在提醒各位道友AOP生效的关键点—代理。不管是CGLIB还是JDK代理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值