java动态代理之cglib动态代理实现
来源:互联网 发布:小额贷款骗局知乎 编辑:程序博客网 时间:2024/06/05 02:08
cglib动态代理实现
Cglib是一个优秀的动态代理框架,它的底层使用ASM在内存中动态的生成被代理类的子类,使用CGLIB即使代理类没有实现任何接口也可以实现动态代理功能。CGLIB具有简单易用,它的运行速度要远远快于JDK的Proxy动态代理:
Cglib动态代理
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
CGLIB的核心类:
net.sf.cglib.proxy.Enhancer – 主要的增强类
net.sf.cglib.proxy.MethodInterceptor – 主要的方法拦截类,它是Callback接口的子接口,需要用户实现
net.sf.cglib.proxy.MethodProxy – JDK的java.lang.reflect.Method类的代理类,可以方便的实现对源对象方法的调用,如使用:
Object o = methodProxy.invokeSuper(proxy, args);//虽然第一个参数是被代理对象,也不会出现死循环的问题。
net.sf.cglib.proxy.MethodInterceptor接口是最通用的回调(callback)类型,它经常被基于代理的AOP用来实现拦截(intercept)方法的调用。这个接口只定义了一个方法
public Object intercept(Object object, java.lang.reflect.Method method,
Object[] args, MethodProxy proxy) throws Throwable;
第一个参数是代理对像,第二和第三个参数分别是拦截的方法和方法的参数。原来的方法可能通过使用java.lang.reflect.Method对象的一般反射调用,或者使用 net.sf.cglib.proxy.MethodProxy对象调用。net.sf.cglib.proxy.MethodProxy通常被首选使用,因为它更快。
运行结果:
++++++before CGLIB$getName$0++++++
getName
------getName------
++++++before CGLIB$getName$0++++++
++++++before CGLIB$getAge$1++++++
getAge
------getAge------
++++++before CGLIB$getAge$1
- java动态代理之cglib动态代理实现
- 动态代理之cglib实现
- Java动态代理--CGLib实现
- Java动态代理之CGLIB
- Java动态代理之CGLIB
- Java动态代理之cglib
- CGLIB实现动态代理
- CGLIB实现动态代理
- cglib实现动态代理
- CGLib实现动态代理
- cglib 实现动态代理
- cglib动态代理实现
- 动态代理之cglib代理
- 动态代理之cglib
- 动态代理之CGLIB
- 动态代理之CGLib
- 动态代理之cglib
- Java动态代理--cglib代理
- Spring与Hibernate整合实现(SH框…
- 系统的简单注解
- 从最基本的Netbeans默认Servlet项…
- 利用MFC中的picture control 控件显示图像
- 从最基本的Netbeans默认Servlet项…
- java动态代理之cglib动态代理实现
- 满屏幕的线程Hibernate结合Servlet…
- SSH框架特例实战【一】(SpringMVC…
- 为何有DAO与Service层?为何先搞Da…
- SSH框架特例实战【二】关于Autowir…
- java.lang.NoSuchMethodError:&nbs…
- @Repository、@Service、@Controll…
- Netbeans许可证,是否能商用,是否…
- Setting property &#039…