问答详情
源自:1-2 代码演示

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

比如说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(注解名)


提问者:程序员GG 2017-10-15 20:51

个回答

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

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

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

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

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