1、静态代理

静态代理:由程序创建或者特定工具自动生成源代码,在程序运行前,代理类的.class文件已经存在

2、动态代理

动态代理:在程序运行时,运用反射机制动态创建而成,无需手动编写代码


JDK动态代理:

要求目标对象实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现接口,这个时候就可以使用CGLIB代理


CGLIB动态代理:

它是在内存中构建一个子类对象从而实现对目标对象功能的扩展

JDK动态代理是自带的,CGLIB需要引入第三方包

CGLIB动态代理基于继承来实现代理,所以无法对final类、private和static方法实现代理

3、spring AOP中代理使用的默认策略

如果目标对象实现了接口,则默认使用JDK动态代理

如果目标对象没有实现接口,则默认使用CGLIB动态代理

如果目标对象实现了接口,程序里面依旧可以指定使用CGLIB动态代理



版权声明:本文为mazadazhangjia原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/mazadazhangjia/article/details/126174127