简述 SpringAOP 的实现原理
Spring 默认采取的动态代理机制实现 AOP,当动态代理不可用时 (代理类无接口)会使用 CGlib 机制。
Spring 提供了两种方式来生成代理对象:JDKProxy 和 Cglib,具体使用哪种方式生成由 AopProxyFactory 根据 AdvisedSupport 对象的配置来决定。默认的策略是如果目标类是接口,则使用 JDK 动态代理技术,否则使用 Cglib 来生成代理。

Spring AOP 中的动态代理主要有两种方式,JDK 动态代理和 CGLIB 动态代理。
JDK 动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。
JDK 动态代理的核心是 InvocationHandler 接口和 Proxy 类。
如果目标类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类 CGLIB (Code Generation Library) ,是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final,那么它是无法使用 CGLIB 做动态代理的。
评论