JDK动态代理是有接口我给你创建一个类和你这个实现类是一样的,
CGLIB不对实现接口的类生成代理,一个普通类也可以生成代理.CGLIB用继承的方式帮你生成代理对象.你父类有的方法我也有了,我想增强也OK了.
为什么要生成父类?因为CGLIB的机制是继承的方式,它得知道你要对谁去生成代理.设置回调跟JDK动态代理的invoke()方法比较像.执行外面的任何一个方法都相当于执行InvocationHandler的invoke()方法.所以CGLIB里面也有这种的操作,只不过它俩不太一样.
CGLIB只能对类生成代理.
Spring可以使用JDK动态代理和CGLIB生成代理,用哪一种?Spring的底层是会自动切换的,如果你实现了接口它就使用动态代理,如果你没有实现接口它就使用CGLIB,它底层会自动切换.
这就是Spring的代理机制.