1、静态代理
静态代理:由程序创建或者特定工具自动生成源代码,在程序运行前,代理类的.class文件已经存在
2、动态代理
动态代理:在程序运行时,运用反射机制动态创建而成,无需手动编写代码
JDK动态代理:
要求目标对象实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现接口,这个时候就可以使用CGLIB代理
CGLIB动态代理:
它是在内存中构建一个子类对象从而实现对目标对象功能的扩展
JDK动态代理是自带的,CGLIB需要引入第三方包
CGLIB动态代理基于继承来实现代理,所以无法对final类、private和static方法实现代理
3、spring AOP中代理使用的默认策略
如果目标对象实现了接口,则默认使用JDK动态代理
如果目标对象没有实现接口,则默认使用CGLIB动态代理
如果目标对象实现了接口,程序里面依旧可以指定使用CGLIB动态代理
版权声明:本文为mazadazhangjia原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。