预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共15页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Java的动态代理2005年03月21日jdk1.3后提供了对动态代理技术的支持。间接支持了AOP.该代理的实现要求被代理的类必须由接口实现 而CGLIB工具包提供了对非接口实现类的代理功能 jdk1.3后提供了对动态代理技术的支持。间接支持了AOP 代理类:packagecom.gever.jcw.dproxy; importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.lang.reflect.Proxy; publicclassAOPHandlerimplementsInvocationHandler{privateObjectoriginalObject;privateAOPHandler(Objectobj){this.originalObject=obj;}publicstaticObjectbind(Objectobj){returnProxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),newAOPHandler(obj));} publicObjectinvoke(Objectproxy,Methodarg1,Object[]arg2)throwsThrowable{Objectresult=null;if(arg1.getName().equals("doWork")){System.out.println("Iampreparingmywork!");result=arg1.invoke(originalObject,arg2);}else{System.out.println("Iampreparingtheotherthing!");result=arg1.invoke(originalObject,arg2);}returnresult;}} 接口类: packagecom.gever.jcw.dproxy;publicinterfaceWorker{publicvoiddoWork();publicvoidgetSalary();} 实现类: packagecom.gever.jcw.dproxy;publicclassWorkerImplimplementsWorker{publicWorkerImpl(){System.out.println("Iamgettinginstance");}publicvoiddoWork(){System.out.print("Iamworking!");}publicvoidgetSalary(){System.out.print("IamgettingmySalary!");}} 测试类 publicclassManager{publicManager(){} publicstaticvoidmain(String[]args){Workerworker=(Worker)AOPHandler.bind(newWorkerImpl());worker.doWork();worker.getSalary();}} 以上代码在JDK1.4.2下运行结果为: IamgettinginstanceIampreparemywork!Iamworking!Iampreparetheotherthing!IamgettingmySalary! 利用CGLIB工具包,可以对非接口实现类的动态代理 代理类: packagecom.gever.jcw.dproxy; importjava.lang.reflect.Method; importnet.sf.cglib.proxy.Enhancer;importnet.sf.cglib.proxy.MethodInterceptor;importnet.sf.cglib.proxy.MethodProxy; publicclassAOPAnotherimplementsMethodInterceptor{privateEnhancerenhancer=newEnhancer();publicAOPAnother(){super();} /*(non-Javadoc)*@seenet.sf.cglib.proxy.MethodInterceptor#intercept(java.lang.Object,java.lang.reflect.Method,java.lang.Object[],net.sf.cglib.proxy.MethodProxy)*/publicObjectintercept(Objec