CGLib动态代理

Spring AOP的原理是 JDK 动态代理和CGLIB字节码增强技术,前者需要被代理类实现相应接口,也只有接口中的方法可以被JDK动态代理技术所处理;后者实际上是生成一个子类,来覆盖被代理类,那么父类的final方法就不能代理,因为父类的final方法不能被子类所覆盖。一般而言Spring默认优先使用JDK动态代理技术,只有在被代理类没有实现接口时,才会选择使用CGLIB技术来实现AOP。

CGLib动态代理要点:

  1. 代理过程在MethodInterceptor.invoke中
  2. 通过Enhancer来创建代理对象
阅读更多

JDK动态代理

大家都知道,接口是不能实例化的,除非实现了该接口,那有没有什么办法,不编写实现类,创捷接口实例呢?

答案是有的,通过JDK动态代理,创建JDK动态代理有几个条件:

  1. 创建代理对象时需要实现InvocationHandler
  2. 代理过程在invoke中实现
阅读更多