CGLib (Code Generation Library) 是一个强大的,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。
CGLib 是Spring、Hibernate依赖的核心包,但是CGLib还算不上最底层的,因为它是在asm包之上做了封装,以增强易用性。据了解,Hibernate3.2已经不再依赖CGLib了,而直接依赖asm。这些都不影响CGLib的强大功能。
下面一个小例:
package cglib;
public class Target{
public String execute() {
String message = "----------test()----------";
System.out.println(message);
return message;
}
}
//
package cglib;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class MyMethodInterceptor implementsMethodInterceptor{
public Object intercept(Object object, Method method, Object[] args,
MethodProxy methodProxy) throwsThrowable {
Object result = methodProxy.invokeSuper(object,args);
return"leaf";
}
}
//
package cglib;
import net.sf.cglib.proxy.Enhancer;
public class TestCglibProxy {
public static void main(String rags[]){
Target target = newTarget();
TestCglibProxy test = newTestCglibProxy();
Target proxyTarget = (Target)test.createProxy(Target.class);
String res=proxyTarget.execute();
System.out.println(res);
}
public Object createProxy(Class targetClass){
Enhancer enhancer = newEnhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(newMyMethodInterceptor());
returnenhancer.create();
}
}
///输出:
----------test()----------
leaf