首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

GCLIB署理

2012-09-17 
GCLIB代理?????? ?CGLib (Code Generation Library) 是一个强大的,高质量的Code生成类库。它可以在运行期扩

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

热点排行