GCLIB代理
?????? ?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