关于切点定义

关于切点定义

之前学的时候不是这样的吗:

@Around("execution(public com.imooc..*.*(..))")
public Object func(ProceedingJoinPoint proceedingJoinPoint){
    //...
}

1、@Pointcut定义切点,这个注解似乎没有讲过,被它标注的方法就是一个切点吗?仅仅充当一个切点吗?切点是一个名词而非动词,那么,如果这个方法不是空方法,它会被执行吗,如果会,它的执行时机是什么呢。

2、以前,切点是直接写在通知注解里面的,而现在在@Before("webLog()")里面,webLog()也是切点吧,也就是说,doBefore直接对webLog()这个空方法进行拦截吗?继第1问,如果webLog()不会被执行,那么doBefore如何拦截呢?还是说,发现webLog()被@Pointcut标注后,会直接拦截webLog()所对应的切点而不是webLog()方法本身?

3、这种写法是为了将一个切点直接复用吗。

4、这种写法是Spring boot里面才有的吗,还是Spring AOP天生的?

5、为什么doAfterReturning()方法中没有JoinPoint参数?是Spring boot的特性致使它可以缺省吗?切面方法中的参数,是不是只要不需要,那么全都可以缺省,比如Object ret?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,关于同学的问题:

1、@Pointcut使用注解的形式定义切入点,标注后即为切入点,仅充当切入点。如果该方法非空,并不会执行。

2、这里的webLog()可以理解为切入点的签名。

@Pointcut("execution(public * com.imooc.mall.controller.*.*(..)))")
public void webLog() {
}

@Before("webLog()")

这种形式相当于

@Before("execution(public * com.imooc.mall.controller.*.*(..)))")

当拦截webLog()相当于拦截切点。

3、是的。

4、这种写法是SpringAop自带的。

5、切面方法中参数,如果没有用到,可以省去,并不是SpringBoot的特性。


祝:学习愉快~

  • rock221 #1
    //设置切点,
    @Pointcut("execution(public * com.imooc.mall.controller.*.*(..))")
    public void webLog(){

    }

    老师,按设置这个切点,这个方法什么时候执行呢?没有设置通知啊 。

    直接这样写不可以吗?

    @Before("execution(public * com.imooc.mall.controller.*.*(..))") //weblog方法执行前拦截处理。
    public void doBefore(JoinPoint joinPoint){

    }


    2021-06-08 15:41:16
  • 同学你好,通知定义了什么时候执行,比如说@Before前置通知,在方法前执行,切点定义在哪个地方执行,需要配合使用。

    可以写为同学书写形式。这里是考虑有两处使用到同样切点的地方,所以将其提取出来,如:

    http://img1.sycdn.imooc.com//climg/60bf2cff0949358410910737.jpg

    祝学习愉快~

    2021-06-08 16:41:55
  • 执行这个方法,方法是空的,所以执行了切点中的所有目标方法?

    如果按照我的写法, 那么切点需要写2次, 这里只需要写一次,调用就行了, 也算优化代码,避免重复代码

    2021-06-08 16:44:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师