Spring aop 实现原理
时间: 2023-08-23 09:13:14 浏览: 140
Spring AOP(面向切面编程)的实现原理是基于动态代理技术。
在 Spring AOP 中,主要使用了两种类型的代理:JDK 动态代理和 CGLIB 代理。
1. JDK 动态代理:
- 当目标类实现了至少一个接口时,Spring AOP 使用 JDK 动态代理。
- JDK 动态代理通过 Java 的反射机制在运行时动态创建代理对象。
- 在运行时,Spring AOP 根据目标类实现的接口信息,生成一个继承了 Proxy 类并实现了目标接口的代理类。
- 当目标方法被调用时,代理类会通过反射机制调用 InvocationHandler 接口的 invoke 方法,并在该方法中执行切面逻辑。
2. CGLIB 代理:
- 当目标类没有实现任何接口时,Spring AOP 使用 CGLIB 代理。
- CGLIB 是一个强大的第三方库,能够在运行时生成目标类的子类来实现代理逻辑。
- 在运行时,Spring AOP 使用 CGLIB 创建一个目标类的子类,并在子类中覆盖目标方法,加入切面逻辑。
- 当目标方法被调用时,代理对象会直接调用子类中的方法,并执行切面逻辑。
Spring AOP 的核心是切面(Aspect)和连接点(Join Point)的概念:
- 切面定义了要在特定连接点执行的切面逻辑。
- 连接点是在应用程序执行过程中可以应用切面的点,如方法调用、方法执行前后、异常处理等。
Spring AOP 通过切点(Pointcut)来确定连接点,将切面逻辑织入到切点所指定的连接点上,从而实现对目标对象的增强。
总结起来,Spring AOP 的实现原理是利用动态代理技术,在运行时动态生成代理对象,并将切面逻辑织入到目标对象的方法中。
希望能清晰地回答你的问题!如果还有疑问,请随时提问。
阅读全文