谈谈你对 Spring AOP 的理解
Spring AOP是面向切面编程,通过代理模式来实现。
我们将与业务逻辑无关,同时又需要在业务执行前后调用的逻辑封装起来,利用代理来进行统一调度。可以减少系统的重复代码,降低耦合度,增加可维护性。使用场景包括:事务处理,记录日志,权限控制等。
Spring AOP中包括了两种代理模式:动态代理以及静态代理,Spring会根据被代理对象是否实现了接口来自动选择使用哪种代理。当被代理对象有实现接口时,默认使用JDK动态代理;当被代理对象没有实现接口时,默认使用Cglib静态代理。
JDK动态代理通过反射来实现代理。在运行期会动态生成代理类,用后销毁。
Cglib静态代理通过生成被代理类的子类实现代理。这种方法限制了被代理类不能使用final来修饰。在编译期时生成代理子类的字节码。