关于切点定义
之前学的时候不是这样的吗:
@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、@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的特性。
祝:学习愉快~
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星