JDK的动态代理依靠接口实现,如果有些类并没有实现接口,则不能使用JDK代理,这就要使用cglib动态代理了。
Cglib动态代理
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
简单实例:
要添加代理的类:ProxyImpl
package reflrction.proxy.staticState; import reflrction.proxy.ITestProxy; public class ProxyImpl implements ITestProxy { @Override @Override } |
cglib代理:CglibProxy
package reflrction.proxy.cglib; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; public class CglibProxy implements MethodInterceptor { private Object target; /** @Override |
主函数:CglibMain
package reflrction.proxy.cglib; import reflrction.proxy.staticState.ProxyImpl; public class CglibMain { /** } |
执行结果:
cglib代理开始 ProxyImpl test001>>>>>>>>>>>>>>>>>>>>>>>>>> 事cglib代理结束 cglib代理开始 ProxyImpl test002>>>>>>>>>>>>>>>>>>>>>>>>>> 事cglib代理结束 reflrction.proxy.staticState.ProxyImpl$$EnhancerByCGLIB$$763ce1c8 |
基本原理解析:
1.JDK的动态代理要求,有做代理的类必须实现一个接口,cglib不需要: 2.cglib使用了一个小而快的字节码处理框架ASM(Java字节码操控框架),来转换字节码并生成新的类: 3.原理都是生成原类的子类,对子类的方法重写: |
相关推荐
java代理机制 JDK动态代理和cglib代理 详解
Spring AOP、动态代理中的CGLib代理依赖的所有jar包
cglib代理模式要使用的相关jar包
NULL 博文链接:https://jummy.iteye.com/blog/255628
CGLib动态代理需要的jar包
JAVA JDK静态代理、动态代理、CGlib代理的代码演示 为对象增加功能
JDK代理和Cglib代理,下载源码清楚了解二者区别
cglib代理jar包
NULL 博文链接:https://pluto418.iteye.com/blog/1692218
NULL 博文链接:https://lochen514.iteye.com/blog/1271194
jdk 的动态代理和CGLIB代理
springAOP等框架中,大量用到代理技术; 两类代理技术: 1,java动态代理,见JDK文档或相关java书; 2.cglib创建代理类,比第一种更加简单,代理类和背代理类不需要实现共同接口。本例子就是cglib代理的例子,很简单
Cglib代理模式实现步骤 1) 需要引入cglib的jar文件 2) 在内存中动态构建子类,注意代理的类不能为final,否则报错 java.lang.IllegalArgumentException: 3) 目标对象的方法如果为final/static,那么就不会被拦截,即...
jdk 和 cglib的简单动态代理,闲来无事 写写。有需要的朋友可以看看
Cglib代理模式必须导入的jar包,包含asm-2.2.3.jar、asm-commons-2.2.3.jar、asm-util-2.2.3.jar、cglib-nodep-2.1_3.jar四个jar包
CGLIB代理例子
我们最终是通过一个代理对象去调用方法的,那我们就要获取一个代理对象,cglib代理,是通过Enhancer这个类里面对应的一个create()方法,去生成一个代理对象的。 Enhancer创建一个被代理对象的子类并且拦截所有的方法...
Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现.doc
静动态代理,cglib,jdk
免费下载Cglib.jar 和asm.jar,杜绝赚分的人