日期:2014-05-20  浏览次数:20791 次

请教大手:AOP中不能拦截什么方法
小弟比较疑惑,面试题

------解决方案--------------------
final
如果是类的方法被标明是final的,则子类无法覆盖。aop在对class拦截的时候,实质上是生成一个代理类,也是被拦截的类的子类。所以如果方法被标明final就无法拦截了
------解决方案--------------------
探讨
final
如果是类的方法被标明是final的,则子类无法覆盖。aop在对class拦截的时候,实质上是生成一个代理类,也是被拦截的类的子类。所以如果方法被标明final就无法拦截了

------解决方案--------------------
确切的说应该是如果一个类既没有实现接口,又被声明为final,那么它的方法是不会被spring拦截的。
没有实现接口,JDK动态代理不能使用。
被声明为final,CGLIB不能使用。(当然如果一个类不声明为final,可方法设置为final,同样此方法不能被拦截)

应该是这样,就是不知spring是否还可以使用别的代理方式。
------解决方案--------------------
呵呵,偶也一起说说,其实准确说final似乎并不能算,因为jdk动态代理可以去实现他,当然面试时候你这么说,估计也可以过;
不过构造方法的确是不能被拦截的,这是某知道
------解决方案--------------------
那总结下 楼上的回答,不能被overidder的方法不能被拦截.呵呵