cglib和jdk

178 阅读1分钟

一.jdk动态代理:

1.jdk动态代理是基于接口的,代理类和被代理类必须实现同一个接口(前提被代理类必须实现接口)

2.jdk动态代理的代理类是jdk内部实现生成的

3.jdk动态代理只会生成一个代理类文件

4.jdk动态代理的增强类是实现InvocationHandler接口

5.jdk动态代理是基于反射去调用的被代理类(被代理类对象需要传入给增强类)

6.jdk动态代理,被代理类内部调用不会再次被代理

二.cglib动态代理

1.cglib动态代理不是基于接口的,代理类会继承被代理类

2.cglib动态代理是基于asm框架来生成代理类文件的

3.cglib动态代理会生成多个代理类文件

4.cglib动态代理增强类是实现了MethodInterceptor

5.cglib调用是直接调用的,子类调用父类的方法

6.cglib动态代理是基于路由去增强调用的

7.cglib动态代理,被代理类内部调用会再次被代理

三.为什么spring service里面用cglib后,内部调用还是没有走代理呢?

因为有aop责任链 @before @after 等等,所有并没有调用proxy.invokeSuper方法