欢迎加入java学习讨论群:725562382
CGLIB动态代理:
CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。 Hibernate支持它来实现PO(Persistent Object 持久化对象)字节码的动态生成
Hibernate生成持久化类的javassist.
CGLIB生成代理机制:其实生成了一个真实对象的子类.
下载cglib的jar包.
* 现在做cglib的开发,可以不用直接引入cglib的包.已经在spring的核心中集成cglib.
public class CGLibProxy implements MethodInterceptor{
private ProductDao productDao;
public CGLibProxy(ProductDao productDao) {
super();
this.productDao = productDao;
}
public ProductDao createProxy(){
// 使用CGLIB生成代理:
// 1.创建核心类:
Enhancer enhancer = new Enhancer();
// 2.为其设置父类:
enhancer.setSuperclass(productDao.getClass());
// 3.设置回调:
enhancer.setCallback(this);
// 4.创建代理:
return (ProductDao) enhancer.create();
}
public Object intercept(Object proxy, Method method, Object[] args,MethodProxy methodProxy) throws Throwable {
if("add".equals(method.getName())){
System.out.println("日志记录==============");
Object obj = methodProxy.invokeSuper(proxy, args);
return obj;
}
return methodProxy.invokeSuper(proxy, args);
}
}
Spring框架结论:
如果这个类没有实现任何接口,使用CGLIB生成代理对象.