说下SpringAOP底层原理

Spring AOP全称是面向切面编程,是Spring框架的一个重要特性,它通过在运行时动态地将额外的行为(如日志记录、事务管理等)织入到应用程序的特定方法或代码块中。
底层原理主要基于动态代理和字节码操作来实现。
对于动态代理Spring AOP使用了JDK动态代理和CGLIB动态代理两种方式来实现代理对象的创建。如果被代理的目标对象实现了接口,Spring AOP将使用JDK动态代理来创建代理对象;如果目标对象没有实现接口,Spring AOP将使用CGLIB动态代理来创建代理对象。代理对象在运行时会拦截目标对象的方法调用,并在方法执行前后执行额外的逻辑。
对于字节码操作,Spring AOP是通过在编译时或运行时修改字节码来实现对目标对象的增强。它使用AspectJ提供的编译器或者在运行时使用AspectJ的字节码增强器来修改字节码。通过修改字节码,Spring AOP可以在方法调用前后插入额外的代码。