Q:怎么理解Spring AOP,它的实现原理是什么,应用场景有哪些?
A:AOP,即面向切面编程,是对OOP(面向对象编程)的一大补充,OOP更多的关注业务功能,AOP更多的关注系统功能,所以,使用的场景包括:日志,事务和权限管理等;
它是基于动态代理实现的,Spring AOP中存在着两种动态代理模式,JDK动态代理和CGLib动态代理。JDK动态代理只能代理接口,通过反射技术获取被代理类的构造方法和代理类,从而创建代理对象,代理对象在执行代理方法时,会在invokeHandler(...)中进行增强操作;CGLib动态代理是基于ASM技术实现的,他可以对类进行代理,即直接加载被代理类的字节码,通过修改字节码生成一个父类为被代理类的子类,子类中重写了父类中的代理方法,这样,代理对象执行代理方法时也会执行增强操作,但执行增强方法是通过Fast-Class机制进行的,它是通过计算增强方法的hash值,来直接调用,相较反射,效率会高一些。
Spring AOP中代理接口时默认使用JDK动态代理,其他情况使用CGLib动态代理。