CGLIB介绍<转>
代理分为静态代理和动态代理。
静态代理和动态代理不在这里详述,大家都知道动态代理的类必须是要实现接口的,如果没有实现接口的话,那应该怎么办呢?
那么我们可以使用CGLIB,在Spring和Hibernate中大量使用了CGLIB,所以我们又必要了解一下。
CGLIB(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。Hibernate主要是利用cglib生成pojo的子类并override get方法来实现lazy loading机制,Spring则是利用cglib来实现动态代理。
CGLIB代理最核心的是net.sf.cglib.proxy.Enhancer类,为了创建一个代理,最起码你要用到这个类。首先,让我们使用NoOp回调创建一个代理:
** * Create a proxy using NoOp callback. The target class * must have a default zero-argument constructor. * * @param targetClass the super class of the proxy * @return a new proxy for a target class instance */ public Object createProxy(Class targetClass) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(targetClass); enhancer.setCallback(NoOp.INSTANCE); return enhancer.create(); }