- JDK动态代理,要求目标对象实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候就可以用CGLib动态代理
- JDK动态代理是自带的,CGlib需要引入第三方包
- CGLib动态代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展
- CGLib动态代理基于继承来实现代理,所以无法对final类、private方法和static方法实现代理
Spring AOP中的代理使用的默认策略
- 如果目标对象实现了接口,则默认采用JDK动态代理
- 如果目标对象没有实现接口,则采用CgLib进行动态代理
- 如果目标对象实现了接口,程序里面依旧可以指定使用CGlib动态代理