CGLIB(Code Generation Library)是一个开源项目。
JDK是针对接口的,有局限性,必须由接口。对于,
业务类不使用接口的,无法使用jdk的动态代理。
CGLib是一个开源的类库,采用非常底层的字节码技术,
可以为一个类创建子类,解决无接口代理问题。
jdk 和 CGLib 生成代理的区别?
jdk动态代理--目标对象面向接口的代理
CGLib代理--目标对象类的子类
Spring在最新的3.2版本,已经内部集成了CGLib开发包。
在spring-core中。
也就是说:spring3.2之前,使用cglib需要我们手动导入jar--cglib.2.2.3.zip
spring3.2之后,我们使用cglib,只需要导入spring的核心jar包,就可以使用。
*CGLib生成代理的步骤:
package junit;
import java.lang.reflect.Method;
import org.junit.Test;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import cn.gp.proxy.proxypattern.ProductDao;
public class CGLibProxyTest {
@Test
public void testCGLib(){
final ProductDao productDao = new ProductDao();
//第一步,创建Enhancer对象
Enhancer enhancer = new Enhancer();
//第二步,设置根据哪个类生成子类。
enhancer.setSuperclass(productDao.getClass());
//第三步,绑定回调函数callback()--代理类在实现方法时,调用callback
enhancer.setCallback(new MethodInterceptor() {
/**
* proxy:生成的代理对象本身
* method:要执行的方法(反射对象)
* args:要执行的方法的参数
* methodProxy:代理对象的方法,不使用
*/
@Override
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
System.out.println("被代理对象的任何方法被调用,都会在此被拦截。。。。");
//调用 被代理对象 的方法(放行)
return method.invoke(productDao, args);
}
});
//第四步,创建代理对象
ProductDao productDaoProxy = (ProductDao) enhancer.create();
productDaoProxy.addProduct();
}
}
相关推荐
java代理机制 JDK动态代理和cglib代理 详解
动态代理和cglib例子,动态代理和cglib例子动态代理和cglib例子动态代理和cglib例子
java静态代理 jdk动态代理 cglib动态代理 代理原理
NULL 博文链接:https://jummy.iteye.com/blog/255628
jdk 和 cglib的简单动态代理,闲来无事 写写。有需要的朋友可以看看
AOP之JDK动态代理和CGLib动态代理 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45195383
实现java动态代理的两个实例,jdk动态代理和cglib
jdk 的动态代理和CGLIB代理
JAVA JDK静态代理、动态代理、CGlib代理的代码演示 为对象增加功能
Spring框架的AOP中重要的一个知识点,动态代理,springAOP框架会根绝实际情况选择使用jdk的动态代理还是cglib的动态代理
JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)
该资源里面有Jdk动态代理,cglib动态代理,反射和拦截器(链)示例,里面也有所需要的jar包,下载下来导入eclipse即可运行,有问题请问我
CGLIB是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。cglib通过继承方式实现代理,也就是基于类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。 我们最终是...
静态代理、jdk动态代理、cglib动态代理
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)
JDK动态代理和Cglib动态代理实例源码
java动态代理和cglib动态代理示例分享共5页.pdf.zip
动态代理cglibjar包和源码动态代理cglibjar包和源码动态代理cglibjar包和源码动态代理cglibjar包和源码动态代理cglibjar包和源码
JDK代理和Cglib代理,下载源码清楚了解二者区别
NULL 博文链接:https://pluto418.iteye.com/blog/1692218