为什么切面拦截不了方法内部的方法?

来源:1-2 代码演示

程序员GG

2017-10-15 20:51

比如说controller,service,serviceImpl三个类,其中service是接口

  1. 如果controller中的delete方法调用service中的delete,在serviceImpl中的delete加了注解没问题,如果serviceImpl中的delete调用了this.del()在del上面加注解就拦截不了。

  2. 我试着在service里加上del,然后在serviceImpl中delete方法中不用this调用,用applicationContext.getBean(service.class).del()这样就可以拦截

    3.我把service中的del()删掉,把serviceImpl中的delete调用del改                        成applicationContext.getBean(serviceImpl.class).del()这样又无法拦截

总结,

  1. 为什么接口实现类方法内部的方法加了注解无法拦截?@Point不是指定加了注解的方法就能拦截么?

  2. 为什么必须要把要拦截的方法放到接口里才行?属于实现类的方法不行?我在定义切点时没有指定拦截那个包下的哪个类啊?用的就是@annotation(注解名)


写回答 关注

1回答

  • 慕粉2056486049
    2017-10-21 21:47:04

    问题1: delete()方法中的this是指原始的service对象

                  controller里面的注入的是代理类aopService

                 只有代用aopService 才能看到代理的效果

    问题2: 说明getBean出来的对象并不是aop (子类)代理的对象,题主可以换做其他AOP方式试下,看看能不能生成cglib代理子类(只是建议,本人没有尝试)

探秘Spring AOP

让我们一起探秘Spring Aop

61204 学习 · 59 问题

查看课程

相似问题