程序员GG
2017-10-15 20:51
比如说controller,service,serviceImpl三个类,其中service是接口
如果controller中的delete方法调用service中的delete,在serviceImpl中的delete加了注解没问题,如果serviceImpl中的delete调用了this.del()在del上面加注解就拦截不了。
我试着在service里加上del,然后在serviceImpl中delete方法中不用this调用,用applicationContext.getBean(service.class).del()这样就可以拦截
3.我把service中的del()删掉,把serviceImpl中的delete调用del改 成applicationContext.getBean(serviceImpl.class).del()这样又无法拦截
总结,
为什么接口实现类方法内部的方法加了注解无法拦截?@Point不是指定加了注解的方法就能拦截么?
为什么必须要把要拦截的方法放到接口里才行?属于实现类的方法不行?我在定义切点时没有指定拦截那个包下的哪个类啊?用的就是@annotation(注解名)
问题1: delete()方法中的this是指原始的service对象
controller里面的注入的是代理类aopService
只有代用aopService 才能看到代理的效果
问题2: 说明getBean出来的对象并不是aop (子类)代理的对象,题主可以换做其他AOP方式试下,看看能不能生成cglib代理子类(只是建议,本人没有尝试)
探秘Spring AOP
61204 学习 · 59 问题
相似问题